TCP/IP简单介绍
网络分层模型
image网络模型主要有OSI七层模型和TCP/IP五层模型,两者实现了网络通讯模型,他们在功能上类似,定义的层数不同,其中OSI模型对TCP/IP中应用层的细节定义更细,虽然目前TCP/IP协议使用的更广,但是实际上很多应用应用中也实现了类似表示层(数据的加解密)和会话层(建立通信链接,保持会话过程通信链接的畅通)的功能。
在两种模型中完全相同的两个部分就是以IP协议为主的网络层和以TCP/UDP为主的传输层,同时这几个协议也是整个协议族中的核心协议,特别是tcp和ip协议
IP协议
IP是底层和上层协议的分界线,数据在网络中的传输细节基本止步于IP协议,它是一种无连接、尽力而为的交付方式,IP协议不能保证数据一定能到底目标,数据报在传输过程中可能因为路由器缓冲区不足或者生命周期耗尽等原因丢失,同时网络中的每个数据报都是独立的,互不相关的,每个数据报都是各种独立的发往目标。
UDP协议
UDP是一种简单的面向数据报的传输层协议,它最多只提供简单的差错校验(udp校验和,可选,但是应该使用),同时UDP数据报也是由程序数据直接封装而来。进程的每次输出正好产生一个UDP数据报。
TCP协议
TCP是一种面向连接,提供可靠传输的传输层协议,为了保证可靠传输,在正式开始数据传输之前,TCP需要建立连接通道,在传输过程中,TCP会把应用数据分割成合适大小段用于传输,同时会提供差错校验、失败重传、流量控制等一系措施来保证传输过程,当然在数据传输完成之后TCP需要关闭连接。
TCP建立连接
在TCP数据报的首部结构如图所示
image其中序列号用于对TCP传输的字节数进行计数,除初始序号外,后每次的序号都是前一次的序号加上数据的字节数。确认号用于对发送TCP报文的一端上一次接受的字节数进行计数,SYN序号用于建立连接。
- 当开始一个新的连接时,请求端(client)会发送一个空数据的TCP数据报,同时SYN位为1,以及初始序号client_isn(其实client_isn由于携带SYN的数据,已经在最原始的序号上+1了,只是接收端无感知)
- 当接收端(server)接受到这一个信号,也会返回一个空数据的TCP数据报,SYN同样为1,确认序号为clinet_isn+1(接收了SYN的信息),同时会返回一个server端的server_isn(同样已经+1了)。
- 当client接收到server的返回时,又会发送一个空数据的TCP数据报,但是SYN为0,确认序号为server_isn+1(接收SYN的信息),同时序号为client_isn+1(在上一次的基础上又发送了SYN的数据)
这个过程又称TCP是三次握手,整个过程的图解如下
TCP_connect.pngTCP断开连接
由于TCP的数据是双向传递的,所以在断开连接时,连接的双方都要关闭连接,除了序号和确认序号外,这个过程主要由TCP首部中的FIN来标识
- 当一端(client)请求断开连接时,他会发送要给FIN给server端,同时client_isn+1
- 当Server收到这个FIN时,他会返回一个ACK表示收到FIN
- Server准备关闭连接,同时他会再发送一个FIN通知client关闭连接
- 当client接收到server的FIN,准备关闭连接同时也会返回一个ACK表示收到FIN
这个过程又称TCP的四次挥手,整个过程图解如下
TCP_disconnect .png