从我们的主机访问另外一个网址,就是数据包交换的过程。每台计算机的地址就是IP地址,想要把一个数据包传递到另一台主机,需要把大数据包拆分成很多小数据包,交给传输层,传输层会将数据包前面附加上UDP头,组成新的UDP数据包,再将其传递给网络层,网络层再将IP头附加到数据包上,组成新的IP数据包,并交给底层。数据包被传输到主机B的网络层之后,被拆开IP头信息,并将拆开来的数据交给传输层,在传输层数据包的UDP头会被拆开,并根据UDP中的端口号,把数据部分交给上层的应用程序。
    虽然UDP的传输速度非常快,但是不能够保证数据的可靠性。
    而想要把数据完整地送达应用程序,就需要使用TCP传输层通信协议,是一种面向连接的,可靠的,并基于字节的。
    TCP连接的生命周期包括“建立连接”,“传输数据”,“断开连接”三个阶段,就是我们常听到的“三次握手”,“四次挥手”。

    第一次握手:客户端发送连接请求,进入SYN_SEND等待服务器确认
    第二次握手:服务器收到客户端的SYN报文段,对报文段进行确认,然后发送SYN+ACK请求信息,发送给客户端,服务器进入了SYN_RECV状态
    第三次握手:客户端接收到服务器的SYN+ACK报文段,双方都进入到ESTABLISHED状态,完成三次握手

    第一次挥手:主机1(客户端或者是服务器端)想主机2发送一个FIN报文段,表示主机1没有数据要发送给主机2了,主机1进入FIN_WAIT_1状态
    第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,主机1进入了FIN_WAIT_2状态,主机2告诉主机1,我同意关闭请求
    第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态
    第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段之后,就关闭连接了;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭

    看了这篇文章之后我对于TCP协议有了基础的认识,但是还有很多需要了解的部分,比如HTTP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等,以及它们之间的关系。

    HTTP与TCP的关系
    TCP协议应用于传输层,HTTP协议应用于应用层。
    HTTP协议是建立在TCP协议之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。HTTP会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,HTTP会立即将TCP连接断开,所以HTTP连接是一种无状态的短连接。