网络编程之TCP/IP基础

本文深入探讨TCP/IP基础知识,涵盖ISO/OSI七层模型和TCP/IP四层模型,讲解了各层的功能、常用协议及端口分配。此外,讨论了MTU、IP数据报格式、TCP特点与报文段格式,以及TCP如何确保数据的可靠传输,包括三次握手与四次挥手过程。同时介绍了滑动窗口协议在流量控制中的作用。
摘要由CSDN通过智能技术生成

01TCP/IP基础(一)

一、ISO/OSI参考模型

1、  OSIopen system interconnection)开放系统互联模型是由ISOInternationalOrganization for Standardization)国际标准化组织定义的网络分层模型,共七层。

2

q  物理层(PhysicalLayer):物理层定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质,本层中数据传输的单位为比特(bit)。属于本层定义的规范有EIA/TIA RS-232EIA/TIA RS-449V.35RJ-45等,实际使用中的设备如网卡等属于本层。

q  数据链路层(DataLink Layer):对物理层收到的比特流进行数据成帧。提供可靠的数据传输服务,实现无差错数据传输。在数据链路层中数据的单位为帧(frame)。属于本层定义的规范有SDLCHDLCPPPSTP、帧中继等,实际使用中的设备如switch交换机属于本层。

q  网络层(NetworkLayer):网络层负责将各个子网之间的数据进行路由选择,分组与重组。本层中数据传输的单位为数据包(packet)。属于本层定义的规范有IPIPXRIPOSPFICMPIGMP等。实际使用中的设备如路由器属于本层。

q  传输层(TransportLayer):提供可靠的数据传输服务,它检测路由器丢弃的包,然后产生一个重传请求,能够将乱序收到的数据包重新排序。

q  会话层(SessionLayer):管理主机之间会话过程,包括会话建立、终止和会话过程中的管理。

q  表示层(PresentationLayer):表示层对网络传输的数据进行变换,使得多个主机之间传送的信息能够互相理解,包括数据的压缩、加密、格式转换等。

q  应用层(ApplicationLayer):应用层与应用程序界面沟通,以达至展示给用户的目的。在此常见的协定有: HTTPHTTPSFTPTELNETSSHSMTPPOP3

二、TCP/IP四层模型

 

对等通信

封装

分用

端口

q  众所周知端口(WellKnown Ports):从01023,这些端口由IANA分配和控制它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:21端口为ftp服务端口。

q  注册端口(RegisteredPorts):从102449151。它些端口不受IANA控制,但由IANA登记并提供使用情况清单。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:1433 Microsoft SQL服务端口

q  动态或私有端口(Dynamicor Private Ports):从4915265535IANA不管这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUNRPC端口从32768开始。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

02TCP/IP基础(二)

一、MTU

  1. 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是15001492字节,将这个限制称作最大传输单元(MTUMaximum Transmission Unit
  2. 如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MTU
  3. 当网络上的两台主机互相进行通信时,两台主机之间要经过多个网络,每个网络的链路层可能有不同的MTU,其中两台通信主机路径中的最小MTU被称作路径MTU

二、以太网帧格式

 

三、ICMP

四、ARP

五、数据在网络中传输过程

 

  1. 步骤a:应用程序ping会判断发送的是主机名还是IP地址,调用函数gethostbyname()解析主机机B,将主机名转换成一个32位的IP地址。这个过程叫做DNS域名解析
  2. 步骤bping程序向目的IP地址发送一个ICMPECHO
  3. 步骤c:将目标主机的IP地址转换为48位硬件地址,在局域网内发送ARP请求广播,查找主机B的硬件地址。
  4. 步骤d:主机BARP协议层接收到主机AARP请求后,将本机的硬件地址填充到应答包,发送ARP应答到主机A
  5. 步骤e:发送ICMP数据包到主机B
  6. 步骤f:主机B接收到主机AICMP包,发送响应包。
  7. 步骤g:主机A接收到主机BICMP包响应包。

六、RARP

 

03TCP/IP基础(三)

一、IP数据报格式

1.        版本

a)        IP协议版本号,长度为4位,IPv4此字段值为4IPv6此字段值为6

2.        首部长度

a)        32位的字为单位,该字段长度为4位,最大值为15,所以首部长度最大为60个字节

3.        服务类型(TOS

a)        长度为8位。此字段包含3位的优先权(现已忽略),4位的服务类型子字段和1位的保留位(必须置0)。4位的服务类型分别为最小延迟(D)、最大吞吐量(T)、最高可靠性(R)、最小费用(F)。

4.        

5.        总长度

a)        该字段长度为16位,以字节为单位,该字段长度包含IP的头部和数据部分。IP数据报最大可达65535个字节。

6.        标识

a)        16位标识,用来标识一个IP包,每发送一个此值会加1

7.        标志与片偏移

a)        3位标志其中第一位不使用, 每二位DFDon’tFragment),该位如果为1,如果传输的数据报超过最大传输单元,该数据报会被丢弃,并发送一个ICMP差错报文。第三位MFMore Fragment)表示是否有更多的片,该位为1,说明后续有分片。最后一片MF0

b)        IP分片后每一个分组都具有自己的首部,但是片偏移值不同,通过片偏移值接收端可以重新组装IP包。

8.        TTL

a)        TTLTime To Live)表示数据报最多可经过的路由器的数量。数据报每经过一个路由器,TTL1,减为0时丢弃,并发送ICMP报文通知源主机。TTL可以避免数据报在路由器之间不断循环。

9.        协议类型

a)        表示IP层上承载的是哪个高级协议。在封装与分用的过程中,协议栈知道该交给哪个层的协议处理。1 ICMP 2 IGMP 6 TCP 17 UDP

10.    头部校验和

a)        保证数据报头部的数据完整性,但校验不包括数据部分。这样做的目的有二:一是所有将数据封装在IP数据包中的高层协议均含有覆盖整个数据的校验和,因此IP数据报没有必要再对其所承载的数据部分进行校验。二是每经过一个路由器,IP数据报的头部要发生改变,而数据部分不变,这样只对发生改变的头部进行校验,显然不会浪费太多的时间。为了减少计算时间,一般不用CRC校验码,而是采用更简单的网际校验和。

11.    TTL

a)        TTLTime To Live)表示数据报最多可经过的路由器的数量。数据报每经过一个路由器,TTL1,减为0时丢弃,并发送ICMP报文通知源主机。TTL可以避免数据报在路由器之间不断循环。

12.    协议类型

a)        表示IP层上承载的是哪个高级协议。在封装与分用的过程中,协议栈知道该交给哪个层的协议处理。1 ICMP 2 IGMP 6 TCP 17 UDP

13.    头部校验和

a)        保证数据报头部的数据完整性,但校验不包括数据部分。这样做的目的有二:一是所有将数据封装在IP数据包中的高层协议均含有覆盖整个数据的校验和,因此IP数据报没有必要再对其所承载的数据部分进行校验。二是每经过一个路由器,IP数据报的头部要发生改变,而数据部分不变,这样只对发生改变的头部进行校验,显然不会浪费太多的时间。为了减少计算时间,一般不用CRC校验码,而是采用更简单的网际校验和。

14.    IP地址

a)        发送数据的主机IP地址

15.    目的IP地址

a)        接收数据的主机IP地址

16.    选项与填充(选项为4字节整数倍,否则用0填充)

a)        安全和处理限制

b)        路径记录:记录所经历路由器的IP地址

c)        时间戳:记录所经历路由器的IP地址和时间

d)        宽松源站路由:指定数据报文必须经历的IP地址,可以经过没有指定的IP地址。

e)        严格的源站路由:指定数据报文必须经历的IP地址,不能经过没有指定的IP地址。

二、网际校验和

  1. 网际校验和,英文全称(Internet Checksum
  2. 发送方对要发送的数据划分为许多16位字序列(如果数据的字节数为奇数,则在末尾补一字节0凑成偶数。)对这些序列反码求和,便得到校验和。
  3. 如果数据在传输过程中没有发生任何差错,那么接收方计算校验和的结果应该为全1。如果结果不是全1(即校验和错误)。

三、路由

 

04TCP/IP基础(四)

 

一、TCP的特点  

  1. 基本于字节流
  2. 面向连接
  3. 可靠传输
  4. 缓冲传输
  5. 全双工
  6. 流量控制

二、TCP报文段格式

 

1.        源端口号与目的端口号

a)        源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接。

2.        序号

a)        序号表示在这个报文段中的第一个数据字节序号。

3.        确认号

a)        仅当ACK标志为1时有效。确认号表示期望收到的下一个字节的序号。

4.        头部长度

a)        4位,TCP头部最多60个字节

5.        保留位

a)        6位,必须为0

6.        6个标志位

a)        URG-紧急指针有效

b)        ACK-确认序号有效

c)        PSH-接收方应尽快将这个报文段交给应用层

d)        RST-连接重置

e)        SYN-同步序号用来发起一个连接

f)         FIN-表示将要终止一个连接

7.        窗口大小

8.        通过窗口大小来达到流量控制。

9.        校验和

10.    tcp头与数据进行校验

11.    紧急指针

a)        是一个正的偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。

12.    选项与填充(选项为4字节整数倍,否则用0填充)

a)        最常见的可选字段是最长报文大小MSSMaximum Segment Size),每个连接方通常都在通信的第一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。该选项如果不设置,默认为53620+20+536=576字节的IP数据报)

三、连接建立三次握手

四、连接终止四次握手

五、TCP如何保证可靠性

  1. 应用数据被分割成TCP认为最适合发送的数据块,称为段传递给IP层。
  2. TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
  3. TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
  4. TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段并且不确认(导致对方超时重传)
  5. TCP承载于IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对收到的数据进行重新排序。
  6. IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
  7. TCP还能提供流量控制。TCP连接的每一方都有一定大小的缓冲空间。

 

05TCP/IP基础(五)

一、滑动窗口协议

  1. 通告接收窗口(rwnd):预防应用程序发送的数据超过对方的缓冲区。接收方使用的流量控制
  2. 拥塞窗口(cwnd):预防应用程序发送的数据超过网络所能承受的能力。发送方使用的流量控制
  3. 发送窗口取两者较小值
  4. 慢启动阀值(ssthreshslow start threshold
  5. 慢启动阶段:cwnd1开始按指数增长直到ssthresh
  6. 拥塞避免阶段:cwnd按线性增长,直到拥塞,将cwnd=1ssthresh减半。

二、UDP报文格式

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值