深入浅出了解TCP/IP协议

转载自:简书-王南北

深入浅出了解TCP/IP协议

TCPIP协议-封面

在当今互联网世界,上网已经不再是什么稀罕事,动动手指就能够通过互联网做到很多以前做不到的事情,但是作为一名互联网从业的开发人员,网络协议依然是必须知道的基础知识。

那么网络协议究竟是什么意思呢?

其实网络协议,就是为了所有的计算机能够在同一个网络中互相传递数据,而制定的数据传输规则。 就好像我们只有说同一种语言才能互相交流一个道理,那么想要在互联网中传递数据,就得遵守标准的网络协议。


OSI参考模型

既然说到网络协议就像一种语言,同语言间才能够互相交流,那么自然网络协议也像语言一样,是多种多样的。

在这种情况下国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI,OSI模型,即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems Interconnection Reference Model)。

这个模型的目的是:提供给开发者一个必须的、通用的概念以便开发完善、可以用来解释连接不同系统的框架。也就是说希望规范网络协议。

OSI模型定义了网络互联的七层框架,也就是将网络协议从软件到硬件,从上到下的分成了七层,每层都为更高一层提供服务。

TCPIP协议-OSI七层模型

虽然说OSI模型算是网络协议的框架标准,但是在实际的使用中,TCP/IP的五层协议使用的更加广泛。


TCP/IP

TCP/IP指的其实不只是TCP和IP这两个协议,而是一个协议簇,其中包括了IP、ICMP、TCP、http、ftp、pop3 等等的一系列协议。 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

TCP/IP是Internet互联网上所有主机间的共同协议。

结构

而TCP/IP协议采用五层结构,其与OSI模型的各层对应关系为

TCPIP协议-协议结构对比

各层作用

物理层和数据链路层

物理层是定义物理介质的各种特性:

  1. 机械特性
  2. 电子特性
  3. 功能特性
  4. 规程特性

数据链路层是负责接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。

  • ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。
  • RARP是反向地址解析协议,通过MAC地址确定IP地址。比如无盘工作站还有DHCP服务。

常见的接口层协议有:

Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。

网络层

负责相邻计算机之间的通信。其功能包括三方面。

  1. 处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
  2. 处理输入数据报:首先检查其合法性,然后进行寻径–假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
  3. 处理路径、流控、拥塞等问题。

网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)

控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。

  • IP是网络层的核心,通过路由选择将下一条IP封装后交给接口层。IP数据报是无连接服务。
  • ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。

传输层

提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的“三次握手”过程,从而提供可靠的数据传输。

传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。

应用层

向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。

应用层协议主要包括如下几个:FTP、TELNET、DNS、SMTP、NFS、HTTP。

  • FTP(File Transfer Protocol)是文件传输协议,一般上传下载用FTP服务,数据端口是20H,控制端口是21H。
  • Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。
  • DNS(Domain Name Service)是域名解析服务,提供域名到IP地址之间的转换,使用端口53。
  • SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中转,使用端口25。
  • NFS(Network File System)是网络文件系统,用于网络中不同主机间的文件共享。
  • HTTP(Hypertext Transfer Protocol)是超文本传输协议,用于实现互联网中的WWW服务,使用端口80。

TCP

TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

在TCP/IP协议簇中,TCP处于传输层中。

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。

TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK),如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和。

TCP报文头

TCP传输的数据分为头部和数据部分。

TCPIP协议-TCP头信息

各个段位说明:

  • 源端口和目的端口: 各占 2 字节.端口是传输层与应用层的服务接口.传输层的复用和分用功能都要通过端口才能实现
  • 序号: 占 4 字节.TCP 连接中传送的数据流中的每一个字节都编上一个序号.序号字段的值则指的是本报文段所发送的数据的第一个字节的序号
  • 确认号: 占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号
  • 数据偏移/首部长度: 占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远.“数据偏移”的单位是 32 位字(以 4 字节为计算单位)
  • 保留: 占 6 位,保留为今后使用,但目前应置为 0
  • 紧急URG: 当 URG=1 时,表明紧急指针字段有效.它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
  • 确认ACK: 只有当 ACK=1 时确认号字段才有效.当 ACK=0 时,确认号无效
  • PSH(PuSH): 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
  • RST (ReSeT): 当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
  • 同步 SYN: 同步 SYN = 1 表示这是一个连接请求或连接接受报文
  • 终止 FIN: 用来释放一个连接.FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接
  • 检验和: 占 2 字节.检验和字段检验的范围包括首部和数据这两部分.在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部
  • 紧急指针: 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)
  • 选项: 长度可变.TCP 最初只规定了一种选项,即最大报文段长度 MSS.MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节.” [MSS(Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度.数据字段加上 TCP 首部才等于整个的 TCP 报文段]
  • 填充: 这是为了使整个首部长度是 4 字节的整数倍
  • 其他选项:
    • 窗口扩大: 占 3 字节,其中有一个字节表示移位值 S.新的窗口值等于TCP 首部中的窗口位数增大到(16 + S),相当于把窗口值向左移动 S 位后获得实际的窗口大小
    • 时间戳: 占10 字节,其中最主要的字段时间戳值字段(4字节)和时间戳回送回答字段(4字节)
    • 选择确认: 接收方收到了和前面的字节流不连续的两2字节.如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不要再重复发送这些已收到的数据

三次握手四次挥手

既然说到TCP,不能不提到广为人知的三次握手和四次挥手,TCP协议为了保证信息传输的连接和可靠性,使用了这样的方式来保证连接的可靠性。

三次握手

所谓三次握手,其实指的是TCP建立连接的过程,整个建立连接的过程需要发送三个包,来确认建立连接,具体流程如下:

TCPIP协议-三次握手

  • 第一次握手: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之间可以开始传输数据了。

四次挥手

四次挥手指的则是断开连接的过程:

TCPIP协议-四次挥手

  • 第一次挥手: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状态,完成四次挥手。

转载请注明:Seven的博客

本文标题:深入浅出了解TCP/IP协议

文章作者:Seven

发布时间:2018年11月21日 - 00:00:00

最后更新:2018年12月11日 - 22:24:39

原始链接:http://yoursite.com/2018/11/21/2018-11-21-reptile-tcp-ip/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%