1、TCP/IP协议基本框架:
客户端通过http发起一个请求时,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的首部,在链路层生成以太网数据包,以太网数据*通过物理介质传输给对方主机,对方接收到数据包以后,然后再一层一层采用对应的协议进行拆包,把应用层数据交给应用程序处理,如下图:
2、应用层
应用层做为 TCP/IP 协议的高层级,主要工作就是定义数据格式并按照对应的格式解读数据,运行在TCP协议上的协议主要有:
lHTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
lFTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。
l还有POP3(收邮件用)、SMTP(发送电子邮件)、TELNET(通过终端登录到网络)、SSH(加密安全登录)等
3、传输层:传输层提供了两种到达目标网络的方式
l用户数据报协议UDP:只提供了基本的错误检测,是一个无连接的协议。
l传输控制协议TCP:提供了完善的错误控制和流量控制,能够确保数据正常传输,是一个面向连接的协议
lTCP报文结构以及每部分的含义和作用
u源端口号/目的端口号: 表示数据从哪个进程来, 到哪个进程去.
u32位序号: 占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号
u32位确认号:占4个字节,是期望收到对方下一个报文的一个数据字节的序号
u4位首部长度: 表示该tcp报头有多少个4字节(32个bit)
u6位标志位:
nURG: 标识紧急指针是否有效
nACK: 标识确认序号是否有效
nPSH: 用来提示接收端应用程序立刻将数据从tcp缓冲区读走
nRST: 要求重新建立连接. 我们把含有RST标识的报文称为复位报文段
nSYN: 请求建立连接. 我们把含有SYN标识的报文称为同步报文段
nFIN: 通知对端, 本端即将关闭. 我们把含有FIN标识的报文称为结束报文段
u6位保留: 顾名思义, 先保留着, 以防万一
u16位窗口大小:占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受(即预留多大空间存储)
u16位检验和:占2字节,校验首部和数据这两部分
u16位紧急指针:占2字节,指出本报文段中的紧急数据的字节数
4、Tcp连接的建立(三次连接)
tcp连接的建立的机制来确认两端口之间的连接是否可用。开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的为客户端,被动打开连接的是服务器,如图:
一次握手:客户端想要连接,创建传输控制块TCB,状态变为主动打开。发送给服务器不包含数据内容的连接请求报文。
二次握手:TCP服务器收到连接请求报文,如果同意连接则发送确认报文。
三次握手:客户端收到确认后还要再向服务器发送确认报文。
5、TCP连接的释放(四次挥手)
l数据传输完毕后,双方都可释放连接。开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。
一次挥手:客户端从ESTABLISHED状态变为主动关闭状态,客户端发送请求释放连接报文给服务器,FIN=1,seq=u(等于前面已经传送过来的数据的一个字节的序号加1),此时客户端进入FIN-WAIT-1(终止等待1)状态。
二次挥手:服务器接收到客户端发来的请求释放报文以后,发送确认报文告诉客户端我收到了你的请求,内容差不多就是seq=v,ack=u+1,ACK=1,此时服务器进入CLOSE-WAIT(关闭等待)状态。
三次挥手:服务器所有的数据都发送完了,认为可以关闭连接了,于是向客户端发送连接释放报文,内容FIN=1,seq=w,ack=u+1(客户端没发送消息,所以提醒客户端下一次还是从u+1开始发送序列),ACK=1。此时服务器进入了 LAST-
ACK(确认)状态,等待客户端发送确认报文。
6、网络层
本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。网路层负责在原机器和目标机器之间建立它们所使用的路由。这一层本身没有任何错误检测和修正机制,因此,网络层必须依赖端到端之间的可靠传输服务。
7、链路层
提供TCP/IP协议的数据结构和实际物理硬件之间的接口。物理层的任务就是为它的上一层提供一个物理连接,以及它们的机械、电气、功能和过程特性。链路层的主要功能是如何在不可靠的物理线路上进行数据的可靠传递。