巧记方法:please do not tell stupid people anything
物理层–》数据链层–》网络层–》传输层–》会话层–》表示层–》应用层
TCP/IP模型
TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。
将协议分成四个层次从下至上分别是:链路层、网络层、传输层、应用层
- 应用层:http、ftp协议
- 传输层:TCP、UDP传输协议
- 网络层:IP协议,为数据加上ip地址和其他数据以确定传输目标
- 数据链路层:这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。
TCP连接的建立与终止
三次握手
TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
- 第一次握手:
建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
- 第二次握手
服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
- 第三次握手
客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
TCP:
重要列举字段:
序列号:(sequences number)
Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记
确认号:(acknowledgement number)
Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
标志位:(Flags)
共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
- URG:紧急指针(urgent pointer)有效。
- ACK:确认序号有效。
- PSH:接收方应该尽快将这个报文交给应用层。
- RST:重置连接。
- SYN:发起一个新连接。
- FIN:释放一个连接
为什么要进行三次握手
主要原因是网络延迟等缘故,当客户端第一次握手,发送建立连接请求时,遭遇网络超时,客户端已知请求超时,但是服务端并不知道,服务端接收到客户端的连接请求后,回复了客户端的请求,统一建立连接,但是客户端并没有发起建立连接,所以正式建立连接后,并不会回应服务器,更不会向服务器向发送数据,所以服务器就处于等待的状态,浪费了服务资源。
采用三次握手后,由于服务器向客户端发了SYN后得不到确认,就知道客户端并没有要求建立连接
四次挥手
TCP和UDP
TCP:传输控制协议
UDP:用户数据报协议
从面向对象上来看
TCP:是面向对象的传输协议,客户端和服务端传输数据必须3次握手,双方建立连接才方可进行数据传输
UDP:无连接传输
从连对象上来看
UDP:支持一对一,一对多
TCP:支持一对一