TCP/IP
TCP/IP参考模型
TCP/IP协议簇
-
TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式。
-
TCP/IP是一组协议的代名词,包括许多别的协议,组成了TCP/IP协议簇。
-
TCP/IP协议并不完全符合OSI的七层参考模型,后者是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。
-
TCP/IP通讯协议采用了4层的层级结构,每一层都依赖它的下一层所提供的网络来完成自己的需求。
应用层
-
HTTP 80
超文本传输协议,提供浏览网页服务 -
Telnet 23
远程登陆协议,提供远程管理服务 -
FTP 20、21
文件传输协议,提供互联网文件资源共享服务 -
SMTP 25
简单邮件传输协议(发邮件),提供互联网电子邮件服务 -
POP3 110
邮局协议(收邮件),提供互联网电子邮件服务 -
TFTP 69 (UDP)
简单文件传输协议,提供简单的文件传输服务
传输层
- TCP(传输控制协议)属于面向连接的网络协议
- UDP(用户报文协议)属于无连接的网络协议
TCP(Transmission Control Protocol) | UDP(User Datagram Protocol) |
---|---|
面向连接 | 无连接 |
可靠传输 | 尽力而为的传输(不可靠) |
协议号:6 | 协议号:17 |
流控及窗口机制 | 无 |
点对点(一对一)通信 | 支持一对一、一对多、多对一和多对多的交互通信 |
基于TCP的应用:HTTP、FTP、Telnet等 | 基于UDP的应用:DNS、SNMP等 |
UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,
不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种
最有效的工作方式,如媒体通信等。
TCP 则提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供
可靠的、面向连接,因此不可避免地增加了许多的开销。这不仅使协议数据单元
的首部增大很多,还要占用许多的处理机资源。
网络层
-
网络层也叫Internet层
负责将分组报文从源端发送到目的端
-
网络层作用
为网络中的设备提供逻辑地址,即IP地址
负责数据包的寻径和转发
-
因特网层工具----Ping
Ping是网络设备、Windows、Unix和Linux平台上的一个命令,其实是一个小巧而实用的应用程序,该应用基于ICMP(Internet Control Messages Protocol)协议。
Ping常用于探测到达目的节点的网络可达性。
数据链路层
在以太网环境中,数据发送方在构建数据的时候,需要填写该数据的三层头部(IP头)及二层头部(以太网帧头)中的相关字段,其中目的IP地址及目的MAC地址是两个关键的信息。
ARP(Address Resolution Protocol)具有两项基本功能:
-
解析出目标IP地址对应的MAC地址。
-
维护ARP映射(IP地址与MAC地址的对应关系)的缓存。
注:ARP欺骗是通过发送伪造MAC地址的arp包实现的,因为以太网中是基于MAC地址通信的。如通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。
TCP协议
报文格式
-
源端口 (Source port) 和目的端口(Destination port )
各占两个字节,分别写入源端口号和目的端口。
-
序号 (Sequence number)
占4个字节。 序号范围[0,2^32 -1],共2^32 个序号。序号增加到2^32-1后,下一个序号就又返回到0。序号使用mod 2^32运算。在TCP连接中传送的字节流中的每一个字节都按顺序编号。我们接收端会根据按序收到的报文选择返回编号。
-
确认号
占4字节,是期望收到对方下一个报文段的第一个数据字节的序列。取决于数据包长度
注意:若确认号是N,则表明:到序号N-1,为止的所有数据都已经正确收到。
-
数据偏移
占4位,它支出TCP报文段的数据距离TCP报文段的起始偏移有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。但应该注意,数据偏移的单位是32位(4字节),而我们4位能表示的最大数组是15(1位代表4字节),所以数据偏移的最大值是60字节,这也是TCP首部的最大长度。
-
保留
占6位,保留为今后使用,但现在应该设置为0.
-
控制位
-
紧急URG
当URG=1时,表明紧急指针字段有效。他告诉系统次报文段中有紧急数据,应尽快传送,而不要按原来的排队顺序来传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面仍然是普通数据。这时要与首部中紧急指针字段配合使用。
-
确认ACK
仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在链接建立后所有传送的报文段都必须置1。
-
推送PSH
接收端TCP收到PSH=1的报文,就尽快的交付给应用程序,而不等待整个缓存都填满了后再向上交付。为后续的数据腾出空间。
-
复位RST
当RST=1时,表明TCP连接中出现严重错误,必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。(如浏览器突然关闭)
-
同步SYN
在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段使SYN=1和ACK=1.因此,SYN置1就表示这是一个连接情切或连接接受报文。
-
终止FIN
用来释放一个连接。当FIN=1时,表明次报文段的发送方的数据已发送完毕,并要求释放运输连接。
-
-
窗口
窗口指的是发送本报文段的一方的接收窗口。窗口值作为接收方让发送方设置其发送窗口的依据。
-
检验和
占2个字节,检验和字段检验的范围包括首部和数据这两部分。
-
紧急指针
占2字节,紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数。它是一个正的偏移量,它和序号字段的值相加就是表示最后一个紧急指针的下一个字节的序号。因此这个字段也相当于紧急指针相对于当前序号的偏移。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,及时窗口为0时也可以发送紧急数据。
-
选项
长度可变,最长可达40字节。当没有使用选项的时候,TCP的首部长度是20字节。
ps:数据偏移最大也就60字节
选项中常见的有:Maximum segment size、SACK permited(选择性确认)、时间戳等
三次握手
确认号ack = 对端seq +1
四次挥手
TCP/UDP端口号
1.一个TCP会话的源端口号通常是客户端随机分配的,目的端口号则对应服务端的受访问的服务。
2.TCP/IP协议中的服务端口号的范围从0到65535,其中1-1023是知名(Well-knwon)端口号,例如Telnet服务使用TCP23端口等。
每一条 TCP 连接有两个端点。TCP连接的端点叫做 套接字(socket)
套接字 socket = (IP地址:端口号)
每一条TCP连接唯一地通信两端的两个端点(即两个套接字)所确定。
TCP滑动窗口机制
UDP协议
报文格式
IP协议
报文格式
一个IP数据报由首部和数据两部分组成。
- 首部的前一部分是固定长度,共20字节 ,是所有的IP数据报必须具有的
- 在首部的固定部分的跟后面是一些可选字段,其长度是可变的
- 版本-----------占4位,指IP协议的版本,目前IP协议版本号为4(即IPv4)
- 首部长度-----------占4位,可表示的最大数值是15个单位(一个单位4字节)
因此IP的首部长度的最大值60字节。 - 区分服务-----------占占8位,用来获得更好的服务,在旧标准中叫做服务类型,
但实际上一直未被使用过; (发送数据的优先)
只有在使用区分服务(DiffServ)时,这个字段才起作用。
在一般情况下都不使用这个字段 QoS 服务质量。 - 总长度-----------占16位,指首部和数据之和的长度,单位位字节,因此数据报的
最大长度为665535字节。总长度必须不超过最大传送单元(MTU)。 - 标识-----------占16位,它是一个计数器,用来产生数据报的标识,不是序号,
每产生一个数据报,就增加1。 - 标志(flag)-----------占3位,目前只有前两位有意义。标志字段的最低位
是MF(More Fragment).MF = 1 表示后面“还有分片”。
MF = 0 表示最后一个分片。标志字段中间的一位是DF
(Don’t Fragment). 只有当DF = 0 时才允许分片。 - 片偏移-----------(13位)指出:较长的分组在分片后,某片在原分组中方的相对位置。
片位移以8个字节为偏移单位。 - 生存时间-----------占(8位)记为TTL (Time To Live)
数据报在网络中可通过路由器的最大值。 windows 一般TTL为127, Linux为64. - 协议-----------占(8位)字段指出此数据报携带的数据使用何种协议以便目的主机
的IP层将数据部分上交给哪个处理过程 - 首部校验和-----------16位)字段,只检验数据报的首部不检验数据部分
这里不采用CRC检验码而采用简单的计算方法
IP数据报首部的可变部分
IP的首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施
选项字段的长可变,从1个字节到40个字节不等,取决于所选项目.