TCP/IP协议分层

TCP/IP协议分层

  • 应用层协议
    • FTP文件传送协议
    • TFTP简单文件传送协议
    • TELNET远程终端协议
    • SMTP简单邮件传送协议
  • 传输层协议
    • 端口号
      • 源端口号和目的端口号
    • TCP传输控制协议
      • 协议段格式
      • 特性
      • 原理
      • TCP粘包问题
    • UDP用户数据报协议
      • 协议段格式
      • 特性
      • 面试题
  • 网络层协议
    • IP协议
      • 协议头格式
      • 网段划分
  • 数据链路层协议
    • ARP协议
      • 作用
      • 工作流程

人们经常提到的TCP/IP并不一定是单指TCP和IP这两个具体的协议,而往往是表示因特网所使用的整个TCP/IP协议族(protocol suite)。

沙漏计时器形状的TCP/IP协议族示意:
TCP/IP协议分层_第1张图片

应用层协议

FTP文件传送协议

文件传送协议FTP (File Transfer Protocol) {RFC 959]是因特网上使用得最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式( 如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
FTP使用客户服务器方式。一个FTP服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成: 一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。

TFTP简单文件传送协议

TPTP的主要特点是:
(1)每次传送的数据报文中有512字节的数据,但最后一次可不足 512字节。
(2)数据报文按序编号,从1开始。
(3)支持ASCII码或二进制传送。
(4)可对文件进行读或写。
(5)使用很简单的首部。

TELNET远程终端协议

TELNET是一个简单的远程终端协议,它也是因特网的正式标准。用户用TELNET就可在其所在地通过TCP连接注册(即登录)到远地的另一个主机上(使用主机名或IP地址)。TELNET能将用户的击键传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。

SMTP简单邮件传送协议

SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。由于SMTP使用客户服务器方式,因此负责发送邮件的SMTP进程就是SMTP客户,而负责接收邮件的SMTP进程就是SMTP服务器。至于邮件内部的格式,邮件如何存储,以及邮件系统应以多。
SMTP通信的三个阶段:
1.连接建立
2.邮件传送
3.连接释放

传输层协议

端口号

● 端口号是一个32位的整数;
● 端口号用来标识一个进程, 告诉操作系统,当前的这个数据要交给哪一个进程来处理;
● IP地址 +端口号能够标识网络上的某一台主机的某一个进程;
● 一个端口号只能被一个进程占用。
一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定。

源端口号和目的端口号

传输层协议(TCP和UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号,就是在描述 “数据是谁发的, 要发给谁”。

TCP传输控制协议

安全和性能的综合

协议段格式

TCP/IP协议分层_第2张图片

源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;
32位序号/32位确认号: 后面详细讲; 4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 60
6位标志位:
URG: 紧急指针是否有效
ACK: 确认号是否有效
PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
16位窗口大小: 后面再说
16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP首部, 也包含TCP数据部分.
16位紧急指针: 标识哪部分数据是紧急数据;
40字节头部选项: 暂时忽略;

特性

  • 有连接
  • 可靠传输
  • 面向字节流
  • 具有接收和发送缓冲区

原理

TCP安全机制如下:
1.确认应答(ACK)机制
序号加确认序号实现:
TCP/IP协议分层_第3张图片
2.超时重传机制
系统基于TCP协议实现,动态计算报文的生存时间,超时时间设置为2MSL
TCP/IP协议分层_第4张图片
作用:
超过超时时间,表示丢包(发送数据包、接收确认数据报),需要重新发送数据报(系统中发送缓冲区保存有数据,可以进行重发)。
3.连接管理机制
整个过程如下:
TCP/IP协议分层_第5张图片
建立连接的过程(三次握手)
首先,客户端向服务端发送一个SYN请求,然后服务端要向客户端返回一个ACK响应,但是由于建立连接都是单方向的连接,所以这时客户端向服务端的连接已经建立,服务端向客户端的连接还没有建立,因此在服务端向客户端返回ACK响应的同时,会合并一个SYN请求一起发送给客户端,然后客户端再返回给服务端一个ACK响应,连接建立。

可以四次握手吗?
答案是可以,ACK响应与SYN请求可以分开发送。
可以两次握手吗?
不可以,因为建立连接都是单方向的。

为什么TIME-WAIT的时间是2MSL?
MSL是TCP报文的最大生存时间, 因此TIME_WAIT持续存在2MSL的话就能保证在两个传输方向上的尚未被接收或迟到的报文段都已经消失(否则服务器立刻重启, 可能会收到来自上一个进程的迟到的数据, 但是这种数据很可能是错误的);
同时也是在理论上保证最后一个报文可靠到达(假设最后一个ACK丢失, 那么服务器会再重发一个FIN. 这时虽然客户端的进程不在了, 但是TCP连接还在, 仍然可以重发LAST_ACK。

关闭连接的过程(四次挥手)
首先,客户端向服务端发送一个关闭连接的FIN请求,然后服务端向客户端返回一个ACK响应,客户端向服务端的连接关闭;然后服务端再向客户端发送一个关闭连接的FIN请求,客户端返回一个ACK响应,至此连接关闭。

能否三次挥手?
不能。第二次ACK是系统内核实现的ACK响应,而FIN是用户程序手动关闭,目的是让用户程序在关闭连接前处理需要的任务(如释放资源)。
能否五次挥手?

4.流量控制
接收端通过TCP协议头中的“窗口大小”字段,告诉发送端,发送数据的大小
目的:
接收端接收能力有限,为了防止接收缓冲区被打满,再接收数据就直接丢弃。使用窗口大小可以告诉发送端发送数据的大小

5.拥塞控制
TCP引入慢启动机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据;
原理:
拥塞窗口初始值设为1,以慢启动指数级增长的方式,达到一定阈值转变为线性增长的方式
TCP/IP协议分层_第6张图片

TCP性能机制如下:
1.滑动窗口
滑动窗口处于发送端,用于提高性能

窗口大小指的是无需等待确认应答而可以继续发送数据的最大值上图的窗口大小就是4000个字节(四个段)。

  • 依赖ack响应报文中的窗口大小字段
  • 依赖拥塞控制窗口大小
    ack响应报文中,携带下一一个序号是多少,表示在此序号之前的所有数据都已经接收到。
    TCP/IP协议分层_第7张图片
    窗口的滑动
    依赖ack响应报文中的下一一个序号来进行滑动,而下一一个序号是多少,又依赖接收到的连续报文的最大序号
    TCP/IP协议分层_第8张图片
    原理:
    操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答;只有确认应答过的数据,才能从缓冲区删掉;接收缓冲区保存有响应ack数据的信息,可以根据ack丟包进行重发,这种机制被称为“高速重发控制"也叫“快重传")。
    2.延迟应答
    原理:
    接收到多个数据报时,不针对每条数据报响应ack,而是延迟一定时间, 这样接收缓冲区数据很快被处理,可用空间就更大,返回的窗口大小字段就可以设置的更大,使网络吞吐量更大,传输效率更高
    延迟的依据:
    (1) 数量
    (2)时间都是由系统决定
    3.捎带应答
    在延迟应答的基础上, 我们发现, 很多情况下, 客户端服务器在应用层也是 “一发一收” 的. 意味着客户端给服务器说了"How are you", 服务器也会给客户端回一个 “Fine, thank you”;那么这个时候ACK就可以搭顺风车, 和服务器回应的 “Fine, thank you” 一起回给客户端。

TCP粘包问题

产生原因
TCP粘包问题一般是由于缓冲区当中有不同的报文信息,当把缓冲区的数据发送到网络上的时候,就会产生粘包问题;粘包问题带来的问题是会导致对方收到网络上的数据的时候无法进行合理的拆包;
解决方法
(1)在处理粘包问题上,需要给每个报文设置明显的消息边界来进行区分;
(2)双方约定发送定长的消息;
(3)在应用层处理的时候加上数据报文头部

UDP用户数据报协议

不保证安全,但性能较好

协议段格式

TCP/IP协议分层_第9张图片

特性

  • 无连接
  • 不可靠
  • 面向数据报:最大不超过64k
  • 有接收缓冲区,没有发送缓冲区

面试题

如何实现可靠的UDP协议?
在应用层实现类似TCP的安全和效率机制。

网络层协议

IP协议

协议头格式

TCP/IP协议分层_第10张图片

4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.
8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位 TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
16位总长度(total length): IP数据报整体占多少个字节.
16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的. 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁
止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为1, 其他是0. 类似于一个结束标记.
13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL -=1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
8位协议: 表示上层协议的类型
16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
32位源地址和32位目标地址: 表示发送端和接收端.
选项字段(不定长, 最多40字节): 略

网段划分

IP地址分为两个部分,网络号和主机号
● 网络号:保证相互连接的两个网段具有不同的标识:
● 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;
●不同的子网其实就是把网络号相同的主机放到一起;
●如果在子网中新增一台主机则这台主机的网络号和这个子网的网络号一 致,但是主机号必须不能和子网中的其他主机重复。
IP地址被划分为五类:
TCP/IP协议分层_第11张图片
A类0.0.0.0到127.255.255.255
B类128.0.0.0到191.255.255.255
C类192.0.0.0到223.255.255.255
D类224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255
特殊的IP地址
1.将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
2.将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据
包;
3.127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

数据链路层协议

ARP协议

作用

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系。

工作流程

●源主机发出ARP请求,询问"IP地址是192.1 68.0.1的主机的硬件地址是多少",并将这个请求广播到本地网段
(以太网帧首部的硬件地址填FFF:FF:FF表示广播);,
●目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符则发送- -个ARP应答数据包给源主机将自
己的硬件地址填写在应答包中;
●每台主机都维护-一个ARP缓存表可以用arp -a命令查看。缓存表中的表项有过期时间(- -般为20分钟),如果
20分钟内没有再次使用某个表项,则该表项失效下次还要发ARP请求来获得目的主机的硬件地址

你可能感兴趣的:(网络)