Skip to content

如何理解TCP/IP协议

专题简介

  • tcp/ip协议是什么
  • TCP/IP网络分层结构
  • TCP协议

TCP/IP协议是什么

TCP/IP 是网络通信的一个标准,所有的互联网通信都必须遵循这个标准,它是一个由多个协议组成的协议族,他在一定程度上参考了 OSI 模型结构,在 OSI 模型的结构上简化为四层结构。 应用层,传输层,网络层,链路层。不同的层,有不同的协议。其中应用层是指程序员关注的地方,其他的传输层,网络层,链路层都是属于内核。

TCP/IP协议和OSI有哪些相同点

  • 都是通过层的结构组成的。
  • 都是网络通信标准。

TCP/IP协议和OSI区别

  • 分层结构不同,OSI 是七层,TCP/IP 是四层
  • OSI 模型是先有模型,再有协议,它是一种设计理论,根据这个去设计接口等规范。TCP/IP 是先有了 http,tcp 等具体的协议,再把这些协议划分到不同的模型层上面去,它是以实际应用为主.
  • OSI 更适合对硬件的开发,比如电流,电压等接口的标准以及对程序的设计。TCP/IP 更多是计算机建立链接需求,主流使用是协议站,比如我和你之间的通信。

TCP/IP网络分层结构

  • 应用层
  • 传输层
  • 网络传输层
  • 链路层

应用层

应用层是 tcp/ip 协议的第一层,是直接为应用进程提供服务的,符合应用层的一些协议,主要准备某种协议的数据,发送前通过内核完成和别人的链接。 应用层协议有 HTTP,TFTP,FTP,NFS,WAIS,SMTP,Telent,DNS,SNMP。

传输层

传输控制层是端对端的通信,是指应用程序使用什么协议进行通信,给应用层提供端口号。不同协议对应不同的端口号,传输层有两个协议,TCP 协议和 UDP 协议。

TCP 协议:面向连接的,可靠的传输协议 UDP 协议:无连接,高效的,不可靠的数据报文协议

应用层和传输层的联系

应用层是使用传输层的端口号进行传输的,比如 http 使用 80 端口,这个 80 端口是传输层提供的端口,http 是要通过 tcp 去建立链接的。传输层通过端口号来判断应用程序,应用程序通信是需要通过传输层建立通信的管道。

网络层

网络层主要是负责将报文从一台主机传到另一台主机,这个传输报文的整个路程称为网络层,主要是包括寻址(IP)和路由(router)。 网络层包括的协议有:ipv4,ipv6,ICMP,IGMP。

链路层

链路层又称数据链路层或者网络接口层,是物理层,将一个网络层通过多台设备切割成一段一段的网络线路,两个设备直连的这段线路叫做数据链路层,所以一个网络层是由多段数据链路层组成的。 该层包括操作系统硬件的设备驱动,NIC(网卡),光纤等物理可见部分,还包括连接器等一切传输媒介。

什么是网络拓扑

就是指网络线路布局

网络层和链路层的关系

链路层是物理层,一个网络层是由一段一段的链路层组成的,通过链路层给整个网络层传送数据,网络层是通过链路层去查找到最终的接收方,然后将数据传送给他。

TCP 协议

面向连接的,可靠的传输协议。

什么是连接

指三次握手

什么是三次握手?

客户端和服务端建立连接了 ,各自开辟了一个队列空间(queue 空间 socket),双方有资源为对方服务。

  • 客户端发送 SYN 给服务端,请求服务端建立建立
  • 服务端收到 SYN 回应一个 SYN+ACK 给客户端,告诉客户端我收到它的连接请求了,并且愿意和他建立连接
  • 客户端收到服务端的 SYN+ACK 回应再次发送 ACK 告诉服务端,我收到你的请求同意了,接下来我们可以进行对话了。

为什么是三次握手?

如果是两次握手,那么 TCP 建立连接只是客户端单方面的,会造成资源的浪费。

什么是TCP 四次挥手

  • 客户端发一个 FIN 报文数据包给服务器请求断开连接
  • 服务器收到 FIN 报文回应一个 ACK 数据包告诉客户端我收到你的断开请求了,正在分配资源,然后进入到 close wait 状态
  • 等到服务 close 状态之后, 有资源断开服务器的连接的了,再发送一个 FIN+ACK 断开连接的报文,服务器进入到 last ack 状态
  • 客户端收到服务器断开连接到 FIN+ACK 报文请求,再次发送 ACK 告诉服务器,我收到你的断开报文了,然后断开。

TCP 的四次挥手为什么是四次,第二部和第三部能不能合并?

第二步和第三步不能合并,服务器收到客户端断开连接的请求后,服务器不可能立马有资源去处理客户端断开连接的请求, 然而客户端每次超过 30 秒没有收到服务端的回应就会重发请求。但是服务器处理断开请求是需要时间的,所以这个时候,服务器需要告诉客户端,他已经收到了客户端的断开请求, 正在等待资源的分配,进入到 close wait 状态。进行了第二部。等到有资源处理了,服务端再发一个断开连接到数据报文回应给客户端,他正在处理断开连接。

什么是 TCP 长连接?

就是一直连接