TCP/IP

Posted 海风就很大众

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP/IP相关的知识,希望对你有一定的参考价值。

目录

TCP/IP协议简介

TCP/IP协议分层

IP是无连接的

IP地址

TCP使用固定的连接

IP路由器

域名

TCP/IP

TCP报文格式

TCP三次握手

TCP四次挥手

为什么建立连接是三次握手,而关闭连接却是四次挥手呢?


​​​​​​​

TCP/IP协议简介

       计算机电脑之间需要定义一些共通的对象来进行交流,TVP/IP就是为此而生。TCP/IP不是一个协议而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及熟悉的http,ftp,pop3协议等等。电脑有了这些就好像学会了外语一样,就可以和其他的计算机终端做自由交流了

TCP/IP协议分层

OSI参考模型,从下到上7层:物理层,数据链路层,网络层,运输层,会话层,表示层,应用层

TCP/IP参考模型,从上到下4层,层层包装:应用层,传输层,网络层,数据链路层

应用层:向用户提供一组常用的应用程序,比如电子邮件,文件传输访问,远程登录等

传输层:提供应用程序间的通信。功能包括:格式化信息流;提供可靠传输

网络层:负责相邻计算机之间的通信。功能包括:处理来自传输层的分组发送请求;处理输入数据报;处理路径,流控,拥堵等问题

网络接口层:这是tcp/ip软件的最底层,负责接收ip数据报并通过网络发送,或者从网络上接收物理帧,抽出IP数据报,交给IP层

IP是无连接的

IP用于计算机之间的通信

IP是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。所以IP就降低了对网络线路的要求。每条线可以同时满足许多不同的计算机之间的通信需要。

通过IP,消息被分割为小的独立的包,并通过因特网在计算机之间传送

IP负责将每个包路由至它的目的地

IP地址

每个计算机必须有一个IP地址才能够连入因特网

每个IP包必须有一个地址才能发送到另一台计算机

TCP使用固定的连接

TCP用于应用程序之间的通信

当应用程序通过TCP与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方握手后,TCP在两个应用程序之间建立一个全双工的通信。

这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

UDP和TCP很相似,但是可靠性低于TCP

IP路由器

当一个IP包从一台计算机被发送,它会到达一个IP路由器

IP路由器负责将这个包路由至它的目的地,直接地或者通过其他的路由器

在一个相同的通信中,一个包所经由的路径可能会和其他的包不同,而路由器负责根据通信量,网络中的错误或者其他参数来进行正确寻址

域名

域名就是TCP/IP地址的名字,域名会被一种DNS程序翻译为数字

DNS服务器负责将域名翻译为TCP/IP地址,同时负责使用新的域名信息更新彼此的系统

当一个新的域名连同TCP/IP地址一同注册后,全世界的DNS服务器都会对此信息进行更新

TCP/IP

TCP/IP意味着TCP和IP在一起协同工作

TCP负责应用软件和网络软件之间的通信

IP负责计算机之间的通信

TCP负责将数据分割并装入IP包,然后在它们到达的时候重新组合他们

IP负责将包发送至接收者

TCP报文格式

16位源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址

16位目的端口号:16位的目的端口定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口

32位序号:32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现时,序列码实际上是初始序列码,而第一个数据字节是ISN+1。这个序列号可用来补偿传输中的不一致

32位确认序号:32位的序列号由接收端计算机使用,重新分段的报文成最初形式。如果设置了ACK控制位,这个值表示一个准备接收的包的序列码

4位首部长度:4位包括TCP头大小

6位保留:为了将来定义新的用途而保留

标志:6位标志域。表示为:紧急标志,有意义的应答标志,推,重置连接标志,同步序列号标志,完成发送数据标志。分别为:URG,ACK,PSH,RST,SYN,FIN

16位窗口大小:用来表示想收到的每个TCP数据段的大小

16位校验和:16位TCP头

16位紧急指针:指向后面是优先数据的字节,在URG标志设置了时才有效

选项:长度不定,但长度必须为1个字节

数据:该TCP协议包负载的数据

URG:紧急标志

ACK:确认标志

PSH:推标志

RST:复位标志

SYN:同步标志

FIN:结束标志

TCP三次握手

       所谓三次握手即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。

第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认

第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了

简洁说法:

1、建立连接时,客户端发送SYN包(SYN=i)到服务器,并进入到SYN-SEND状态,等待服务器确认

2、服务器收到SYN包,必须确认客户的SYN(ack=i+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN-RECV状态

3、客户端收到服务器的SYN+ACK包,向服务器发送确认报ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据。

TCP四次挥手

       所谓四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发:

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

       这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

  • 保证TCP协议的全双工连接能够可靠关闭
  •  保证这次连接的重复数据段从网络消失

以上是关于TCP/IP的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP协议组——完整工作过程分析

计算机网络基础之笔记二(TCP/IP)

CCNA 之 TCP/IP 及 子网划分

localhost和127.0.0.1的区别

Http,socket和TCP/IP的关系

HTTP笔记_01_HTTP相关的协议