IP /TCP协议及握手过程和数据包格式中级详解

网络 通信技术
IP被称为网际协议,是Internet上使用的一个关键的底层协议。TCP/IP是通用的通信协议,使Internet成为一个允许连接不同类型的计算机和不同操作系统的网络。

IP地址

定义:

IP被称为网际协议,是Internet上使用的一个关键的底层协议。TCP/IP是通用的通信协议,使Internet成为一个允许连接不同类型的计算机和不同操作系统的网络。

特点:

IP协议具有能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另外一个地点传送二进制数据,记忆可以使用IP协议加入Internet。

要求:

为了通信的需求,连接Internet的每台计算机上都必须运行IP软件。,以便时刻准备发送或接收信息。

实质:

IP地址是由IP协议规定的,由32位的二进制数表示(IPv4)。***的IPv6协议将IP地址升为128位,这使得IP地址更加广泛,能够很好的解决目前IP地址紧缺的情况。但是IPv6协议距离实际应用还有一段距离,目前多数操作系统和应用软件都是以32位的IP地址为基准。

组成:

32位的IP地址(IPv4)主要分为两个部分,即前缀和后缀。前缀表示计算机所属的物理网络(网络号),后缀确定该网络上的唯一一台计算机(主机号)。 即 :

IP地址=网络号+主机号

分类:

在Internet上,每一个物理网络都有一个唯一的网络号,根据网络号的不同,可以将IP地址分为5类,即A类、B类、C类、D类和E类。其中A类、B类和C类属于基本类,D类用于多播发送,E类属于保留类。各类IP地址的范围如下:

网络地址:

在IP地址中主机地址为0的表示网络地址。例如:128.111.0.0。

广播地址(全‘1’地址):

在网络号后所有为全是1的地址,表示广播地址。

回送地址:

127.0.0.1表示回送地址,也叫本机地址,用于测试。

全‘0’地址:

对应当前主机。

ABC主要类型地址保留区域: 

IP /TCP协议及握手过程和数据包格式中级详解

域名系统(DNS)

域名系统是一个分布的数据库,它提供将主机名(即网址)转换成IP地址的服务。

RFC

Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件,包括了tcp/ip协议的标准文档。

端口(port)

端口(Port)包括逻辑端口和物理端口两种类型。

物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。

逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。 

IP /TCP协议及握手过程和数据包格式中级详解

端口号(Port Code)

由于物理端口和逻辑端口数量较多,共(2^16-1)个,为了对端口进行区分,将每个端口进行了编号,这就是端口号。运输层的端口号分为服务端使用的端口号(0-49151[熟知端口号(0-1023)、登记端口号(1024-49151)])和客户端使用的端口号(49151-65535)。网络常用端口号 - 姜亚轲的博客 - CSDN博客

应用编程接口(API,Application Programming Interface)

API是一些预先定义的函数。常用的编程接口有socket和TLI。其功能主要包括:远程过程调用(RPC)、标准查询语言(SQL)、文件传输和信息交付等。API 可以应用于所有计算机平台和操作系统。

概要设计文档的接口部分简单,一般分为:用户接口、外部接口和内部接口三个部分。用户接口只要简述用户操作和反馈结果等;外部接口简述硬件输入输出、网络传输协议等;内部接口简述模块间传值、数据传递等即可。 

IP /TCP协议及握手过程和数据包格式中级详解

数据包格式

TCP/IP协议的每层都会发送不同的数据包,常见的有IP书包,TCP数据包,UDP数据包和ICMP数据包。

 IP /TCP协议及握手过程和数据包格式中级详解

IP数据包(IP Datagram):

IP数据包是在IP协议间发送的,主要在以太网与网际协议模块之间传输,提供无链接数据博爱传输。IP协议不保证数据包的发送,但***限度的发送数据。IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。IP协议结构定义如下:

  1. typedef struct HeadIP { 
  2.  unsigned char headerlen: 4; //首部长度,占4位 
  3.  unsigned char version: 4 ; //版本,占4位 
  4.  unsigned char servertype ; //服务类型,占8位,即一个字节 
  5.  unsigned short totallen; //总长度,占16位 
  6.  unsigned short id ; // 与idoff构成表示,共占16位,前3位是标识,后13位是片偏移 
  7.  unsigned short idoff; 
  8.  unsigned char ttl ; //生存时间,占 8位 
  9.  unsigned char proto ;//协议,占8位 
  10.  unsigned short checksum ;// 首部检验和,占16位 
  11.  unsigned int sourceIP ; // 源IP地址 ,占32位 
  12.  unsigned int destIP ;// 目的IP地址,占32 位 
  13.  }HeadIP; 

注:理论上,IP数据包的***长度时655535字节,这是由IP首部16位总长度字段所限制的。

IP路由选择过程: 

IP /TCP协议及握手过程和数据包格式中级详解

TCP数据包(TCP Datagram):

传输控制协议TCP是一种提供可靠数据传输的通行协议,他在网络协议模块和TCP模块之间传输,TCP数据包分TCP包头和数据两个部分。TCP数据是被封装在IP数据包中的,和udp类似,在IP数据包的数据部分。TCP包头包含了源端口、目的端口、序列号、确认序列号、头部长度、码元比特、窗口、校验和、紧急指针、可选项、填充位和数据区,在发送数据时,应用层数据传输到传输层,加上TCP的TCP包头,数据就构成了包文。报文式网际层IP的数据,如果再加上IP首部,就构成了IP数据包。TCP包头结构定义如下:

  1. typedef struct HeadTCP{ 
  2.  WORD SourcePort ; //16位源端口号 
  3.  WORD DePort ;// 16位目的端口号 
  4.  DWORD SequenceNo ;//32位序列号 
  5.  DWORD ConfirmNo ;// 32位确认序列号 
  6.  BYTE HeadLen ; //与Flag为一个组成部分,首部长度,占4位,保留6位,6位表示,共16位 
  7.  BYTE Flag; 
  8.  WORD WndSize ; //16位窗口大小 
  9.  WORD CheckSum ; //16位校验和 
  10.  WORD UrgPrt;// 16位紧急指针 
  11.  }HeadTCP; 

TCP提供了一个完全可靠的、面向连接的、全双工的(包含两个独立且方向相反的连接)流传输服务,允许两个应用程序建立一个连接,并在全双工方向上发送数据,然后终止连接。每一个TCP连接可靠的建立并完善地终止,在终止发生前,所有数据都会被可靠地传送。 

IP /TCP协议及握手过程和数据包格式中级详解

TCP比较有名的概念是3次握手,所谓3次握手指通信双方批次交换3次信息。3次握手是在数据包丢失、重复和延迟的情况下,确保通信双方信息交换确定性的充分必要条件。

TCP/IP 三次握手建立连接:

***次握手:客户端--发送----syn包(seq=x)-----服务器--进入SYN_END状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=x),即SYN+ACK包,此时服务器进入SYN——RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成握手,连接建立。 

IP /TCP协议及握手过程和数据包格式中级详解

注:握手时,发送的包不包括数据;连接建立后,才开始正式传输数据。在主动关闭连接之前,TCP连接将会被一直保持下去。

数据传输机制:

1. 超时重传:该机制用来保证TCP传输的可靠性。

2.快速重输:发送端在收到连续的丢包信息后,立即启动重传,节约等待超时时间。

3.流量控制:TCP滑动窗流量控制。滑动窗可以是提高TCP传输效率的一种机制。

4.拥塞控制:基于整个网络考虑的,拥堵策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复。

TCP四次握手断开连接:

***次握手:主断方发送一个FIN,通知被断方:我即将关闭数据传输通道。此时主断方还可接收数据。

第二次握手:被断方收到FIN包后,发送一个ACK给主断方,确认序号为收到的序号+1(与SNK相同,一个FIN占用一个序号)。

第三次握手:被断方发送一个FIN,通知主动方:我即将关闭数据传输通道。

第四次握手:主断方收到FIN后,发送一个ACK给被断方,确认序号为收到的序号+1,通道双方断开。四次挥手完成 。

IP /TCP协议及握手过程和数据包格式中级详解

注:可靠传输服务软件都是面向数据流的。

UDP数据包:

用户数据包协议UDP是一个面向无连接的协议,采用该协议后,两个应用程序不需要建立连接,他为应用程序提供一次向的数据传输服务。UDP协议工作在网际协议模块与UDP模块之间,不提供差错恢复,不能提供数据重传,所以使用UDP协议的应用程序都比较复杂,例如DNS(域名解析服务)应用程序。UDP数据包包头结构如下:

  1. typedef struct HeadUDP { 
  2.  WORD SourcePort ;// 16位端口号 
  3.  WORD DePort ; //16位目的端口 
  4.  WORD Len;//16位UDP长度 
  5.  WORD ChkSum;// 16位UDP校验和 
  6. }HeadUDP; 

UDP数据包分为伪首部和首部两个部分。

首部包含原IP地址、目标IP地址、协议字、UDP长度、源端口、目的端口、包文长度、校验和、数据区,是为了计算和检验而设置的。

伪首部包含IP首部一些字段,其目的是让UDP两次检查数据是否正确到达目的地。使用UDP协议时,协议字为17,包文长度包括头部和数据区的总长度,最小8个字节。校验和是以16为单位,各位求补(首位为符号位)将和相加,然后再求补。

现在的大部分系统默认提供了可读写大于8192字节的UDP数据包(使用这个默认值是因为8192是NFS读写用户数据的默认值)。因为UDP协议是误差错控制的,所以发送过程与IP协议类似,即IP分组,然后用ARP协议来解析物理地址,***发送。

UDP网络发送和接收数据:

 

IP /TCP协议及握手过程和数据包格式中级详解

ICMP数据包

ICMP协议被称为网际控制包文协议。作为IP协议的附属协议,ICMP协议用来与其他主机或路由器交换错误包文和其他重要信息,可以将某个设备的故障信息发送到其他设备上。ICMP数据包包头结构如下:

  1. typedef struct HeadICMP { 
  2.  BYTE Type ;//8位类型 
  3.  BYTE Code; //8位代码 
  4.  WORD ChkSum;// 16位校验和 
  5. }HeadICMP; 

 

责任编辑:武晓燕 来源: 今日头条
相关推荐

2021-05-12 00:07:27

TCPIP协议

2019-08-21 05:48:06

TCPIP协议栈

2014-07-09 09:43:59

2015-04-01 10:22:06

WebSocket网络协议WebSocket协议

2010-06-13 14:41:59

TCP IP协议

2014-09-22 09:15:03

TCPIP

2019-04-29 07:53:11

TCP数据包TCP网络编程

2019-10-17 11:06:32

TCP粘包通信协议

2019-09-30 09:28:26

LinuxTCPIP

2019-05-28 10:32:29

TCPUDP SYN

2010-06-13 15:22:16

TCP协议数据报头

2010-05-26 17:42:29

IPv6数据包

2017-09-25 21:27:07

TCP协议数据链

2017-04-07 09:30:49

Linux网络数据包

2017-03-28 13:25:14

Linux网络数据包

2015-11-09 09:58:56

2014-11-21 09:16:23

TCPIP

2020-12-03 08:37:38

TCPIPARP协议

2017-06-22 09:02:40

TCPIP重组

2010-09-08 15:11:36

TCP IP协议栈
点赞
收藏

51CTO技术栈公众号