TCP/IP协议

第1章 概述

协议分层概念基于一个称为开放系统互连标准(OSI)的模型,该模型由国际标准化组织(ISO)定义的 。

ISO定义的标准7层OSI模型


编号 名称 描述
7 应用层 指定完成某些用户初始化任务方法,应用协议通常由应用开发者设计和实现m,例子包括FTP, Skype等
6 表示层 指定针对应用的数据表示格式和转换规则的方法。通常加密有时与本层相关,但是也可以在其他层中(数据格式化 数据加密)
5 会话层 指定多个连接组成一个通信会话方法。(建立管理和维护对话)
4 传输层 指定运行在相同计算机系统中的多个程序之间的连接或关联的方法。如果在其他地方没有实现,本层可能实现可靠的投递(例如 TCP,UDP,ISO TP4 )
3 网络层 IP选址及路由选择
2 数据链路层 指定经过单一链路通信的方法,包括多个系统共享同一介质时的"介质访问"控制协。本层通常包括差错检测和链路层地址格式(例如: 以太网, Wi-Fi, ISO 13239/HDLC )
1 物理层 指定连接器, 数据速率和如何在某些介质上进行位编码。

TCP/IP 四层模型

  • 应用层: 包括会话层,表示层, 应用层
  • 传输层
  • 网络层
  • 网络接口层: 对应物理层和数据链路层

第10章 用户数据报协议(UDP)和IP分片

UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正,队列管理,重复消除,流量控制和拥塞控制。它提供差错检测, 包含我们在传输层碰到的第一个真实的端对端(end-to-end)校验和。

下图为一个UDP数据报作为单个IPv4数据报的封装。

UDP头部

端口号相当于邮箱, 帮助协议辨认发送和接收进程。它们纯属抽象的(不与主机上任何物理实体相关)。 在UDP中,端口号是正的16比特的数字, 源端口号是可选的 ; 如果数据报的发送者不要求对方回复的话,它可被置为0 ;

UDP头部(8字节): 源端口号(2字节) + 目的端口(2字节) + 长度(2字节) + 校验和(2字节)

UDP长度字段是UDP头部和UDP数据的总长度,以字节为单位。这个字段的最小值是8 。

UDP/IPv4分片

如果数据报的大小操过链路的MTU (最大传输单元Maximum Transmission Unit ), 那么IP数据报就要被分割成多个IP分组, 这就可能导致性能问题, 如果任何一个分片丢失, 整个数据报就丢失了。

第12章 传输控制协议(TCP)

TCP头部, 它的标准长度20字节, 除非出现选项。在TCP术语中, 一个IP地址和端口的组合有时被称为一个端点 (endpoint) 或者套接字(socket) ; 每个TCP连接由一对套接字或端点(四元组, 由客户机IP地址, 客户机端口号, 服务器IP地址及服务器端口号组成)唯一的标志。


名称 描述
CWR 拥塞窗口减(发送方降低它的发送速率)
ECE ECN回显(发送方接收到一个更早的拥塞通告)
URG 紧急(紧急指针字段有效 很少被使用)
ACK 确认(确认号字段有效 连接建立后一般都是启用状态)
PSH 推送(接收方应尽快给应用程序传送这个数据)
RST 重置连接(连接取消, 经常是因为错误)
SYN 用于初始化一个连接的同步序列号;
FIN 该报文段的发送方已经结束向对方发送数据。

第13章 TCP连接管理

TCP是一种面向连接的单播协议。发送数据前,通信双方必需在彼此之间建立一条连接 。由于需要对连接状态进行管理,TCP被认为是一个比UDP协议复杂得多的协议。

TCP连接的建立与终止

一个TCP连接由一个4元组构成, 它们分别是两个IP地址和两个端口号。更准确的说, 一个TCP连接是由一个对端点或套接字构成,其中通信的每一端都是由一对(IP地址,端口号)所唯一标识。

一个TCP连接通常分为三个阶段: 启动, 数据传输(也称 连接已建立) 和退出(关闭) 。

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

Wireshark抓包如下:

上图为第一次握手客户端发送SYN = 1 ,seq = 0 (随机数J);

上图为第二次握手.

上图为第三次握手,Client收到确认后,检查ack是否为J+1 。

posted @ 2019-11-20 15:51  好萌一把刀  阅读(270)  评论(0编辑  收藏  举报