回顾和前提知识:
- 网络层IP协议:网际控制报文协议ICMP,网际组管理协议IGMP,地址解析协议ARP和选路协议(RIP最短路径,OSPF最好带宽,BGP发言人外部网关协议)
- 传输层协议:TCP流模式,UDP数据包模式
- 应用层:http网页协议,https,ftp站点,DNS域名解析,SMTP发邮件协议,PoP3收邮件协议,RDP远程桌面协议

1 传输层两个协议的应用场景:
- TCP:分段 编号(为了拼接) 流量控制 需要建立会话 可靠传输 【
**netstat -n**命令可以查看会话】 - UDP:一个数据包就能完成数据通信 不建立会话 多播(不可靠传输)
- QQ聊天是使用的是UDP协议;
- QQ传输文件是TCP协议可靠传输;
- 访问网站 使用TCP协议;
2 传输层与应用层之间的关系(“端口”联系)
TCP和UDP协议和不同的端口即可对应一个应用层的协议。
熟知数值一般为0-1023;登记端口号数值1024-49151(为没有熟知端口号的应用程序使用的),客户端口号数值为49152-65535(留给客户进程选择暂时使用)。
用的应用层协议使用的端口(号):
ftp = TCP + 21telnet = TCP + 23SMTP = TCP + 25**DNS**`` = UDP + 53(主要) 或 TCP + 53**http**`` = TCP + 80**Https**`` = TCP + 443POP3 = TCP + 110共享文件夹 =`` TCP + 445SQL = TCP + 1433(微软的SQL server)RDP = TCP + 3389以上的端口是可以更改的
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。
3 应用层协议和服务之间的关系
防火墙是基于网卡的,只打开必要的端口,不必要的端口不允许接收数据,不影响服务的运行和监听。
服务(指对外的服务)运行后在 TCP或UDP的某个端口侦听客户端的请求。
侦听
客户端使用IP地址定位服务器(计算机),使用目标端口定位服务;
可以在服务器网卡上设置只开放必要的端口,实现服务器网络安全。
设置网卡,只开放必要端口
3.1 练习1:查看自己计算机的监听端口
netstat -a查看自己计算机的监听端口netstat -an以数字的形式查看端口netstat -n查看建立的会话netstat -nb查看建立会话的进程telnet 192.168.80.100 3389测试远程计算机某个端口是否打开netstat -n | find "ESTABLISHED"只查看已经建立的“ESTABLISHED”的会话
3.2 练习2:在Windows上添加服务
可添加,如:DNS服务、Web服务、SMTP服务、POP3服务
- 点击程序功能

- 选择需要下载的服务
3.2.1 安装收发邮件服务
需要安装的服务:
- DNS服务:域名解析;
- web服务:
- SMTP服务:发邮件;
- POP3服务:收邮件;
3.3 练习3:手动设置端口开启

3.4 练习4:筛选服务端口,设置Windows网络安全
- 打开防火墙

- 点击高级设置

- 点击入站或者是出站规则,然后新建规则

- 选择端口,然后根据端口一步步设置便可

3.5 练习5:Windows防火墙的作用,将所有服务端口关闭
不拦截出去的流量,但是拦截进来的流量。
假如,A主机把防火墙打开。则其他主机
pingA主机,就ping不通;但是A主机可以pIng通B主机(前提,B主机没开防火墙)。
但是木马程序是服务器,连接客户端来连接计算机,防火墙不能起作用。此时可以限制端口访问,或者全关服务。
3.6 使用“telnet”命令测试能否访问远程端口
简单使用格式:telnet [远程主机IP地址] [要测试的端口]
4 传输层实现的功能
5 传输层协议与网络层协议的主要区别
6 传输层的主要功能
7 传输层的端口
各种协议的协议号:
- TCP的协议号:6;
- UDP的协议号:17;
- ICMP的协议号:1;
8 TCP的端口号
端口用一个16位的二进制 的端口号进行标识。
端口号只有本地意义,即端口号只是为了标志本计算机应用层中的个进程,在因特网中不同计算机的相同端口号是没有联系的。
运行在计算机中的进程是用进程标识符来标志的。运行在应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符。这是因为在因特网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对 TCP/IP 体系的应用进程进行标志。
解决这个问题的方法就是在运输层使用协议端口号(protocol port number),或通常简称为端口(port)。
虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP 来完成。
8.1 端口的类型
由于端口号由16位二进制数来标识,所以它的范围为:0~65536。
- 熟知数值一般为
0-1023;
如:
登记端口号数值
1024-49151(为没有熟知端口号的应用程序使用的);登记端口,比如说是后来才开发的协议和应用,那么它就可去Internet管理部门申请这个区间的端口号。以后申请的这个端口就不要给其他应用程序使用了。
- 如远程桌面使用的RDP协议,它使用的端口为3389。
- 客户端口号数值为
49152-65535(留给客户进程选择暂时使用)。
9 用户数据报协议:UDP
UDP:用户数据报协议;
用户数据报协议UDP只在IP的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及差错检测的功能。UDP的主要特点是:
- 1. UDP是无连接的,即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
- 2. UDP使用尽最大努力交付,即不保证**可靠**交付,因此主机不需要维持复杂的连接状态表(这里面有许多参数)。
- 3. UDP是面向报文的。
- 发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文,如图5-4所示。
- 在接收方的UDP,对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程。也就是说,UDP一次交付一个完整的报文。

- UDP没有拥塞控制。很适合多媒体通信的要求。
如老师的屏幕 广播给其他的学生;
- UDP没有拥塞控制。很适合多媒体通信的要求。
- UDP支持一对一、一对多、多对一、多对多 的交互通信;
9.1 UDP首部的格式

图5-5
图 5-6
UDP的首部开销比较小,只有8个字节;
用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节(如上图所示),由四个字段组成,每个字段的长度都是两个字节。各字段意义如下:
- 源端口号:在需要对方回信时选用。不需要时可用全0;
- 目的端口:这在终点交付报文时必须使用;
- 长度:UDP用户数据报的长度,最小为8字节(即 仅有首部);
- 检验和:检测UDP用户数据报在传输中是否有错。有错就丢弃;
其中的“伪首部”由12字节构成。伪首部不是UDP用户数据报的真正的部分,它只是在计算检验和时,临时添加在UDP用户数据报前面,得到一个临时的UDP用户数据报。
-
9.2 计算UDP检验和
UDP 计算检验和的方法和计算IP数据报首部检验和的方法相似。但不同的是:IP数据报的检验和只检验P数据报的首部,但UDP的检验和是把首部和数据部分一起都检验。
在发送方,首先是先把全零放入检验和字段。
- 再把伪首部以及UDP用户数据报看成是由许多16位的字串接起来的。
- 若UDP用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发送)。
然后按二进制反码计算出这些16位字的和。将此和的二进制反码写入检验和字段后,就发送这样的UDP用户数据报。
在接收方,把收到的UDP用户数据报连同伪首部(以及可能的填充全零字节)一起,按二进制反码求这些16位字的和。当无差错时其结果应为全1。否则就表明有差错出现,接收方就应丢弃这个UDP用户数据报(也可以上交给应用层,但附上出现了差错的警告)。
图5-7给出了一个计算UDP检验和的例子。这里假定用户数据报的长度是15字节,因此要添加一个全0的字节。读者可以自己检验一下在接收端是怎样对检验和进行检验的。不难看出,这种简单的差错检验方法的检错能力并不强,但它的好处是简单,处理起来较快。
如图5-5所示,
- 伪首部的第3字段是全零;
- 第4字段是IP首部中的协议字段的值。
- 以前已讲过,对于UDP,此协议字段值为17;
- 第5字段是UDP用户数据报的长度。
因此,这样的检验和,既检查了UDP用户数据报的源端口号和目的端口号以及UDP用户数据报的数据部分,又检查了IP数据报的源IP地址和目的地址。
10 传输控制协议:TCP
传输控制协议TCP 则是提供面向连接的服务。即,应用程序再使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。
就是说,应用进程之间的通信好像在“打电话”:通话前要先拨号建立连接,通话结束后要挂机释放连接。
每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)。
- TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。
- TCP还具有流量控制的功能。如当接收端此时接收的数据处理不过来了,那接收端会向发送端传递消息,让发送端此时慢一点发送数据。
TCP 提供全双工通信。即,同时可以进行收、发数据。
TCP允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。在发送时,应用程序在把数据传送给TCP的缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去。在接收时,TCP 把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据。
- 面向字节流。
- TCP中的“流”(stream)指的是流入到进程或从进程流出的字节序列。
- “面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCР把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
TCP并不知道所传送的字节流的含义。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的
数据块具有对应大小的关系(例如,发送方应用程序交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付上层的应用程序)。但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。当然,接收方的应用程序必须有能力识别收到的字节流,把它还原成有意义的应用层数据。图5-8是上述概念的示意图。
10.1 TCP的连接
TCP把连接作为最基本的抽象。TCP的许多特性都与TCP是面向连接的这个基本特性有关。
每一条TCP连接有两个端点。
TCP连接的不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口,TCP的连接叫做“套接字(scoket)”。
IP地址+端口号=套接字
10.2 TCP协议实现可靠传输
可靠传输的工作原理:停止等待协议。
1、
如:A端发送数据给B端,如果B端不发送是否收到数据的信息,则A端默认B端没收到数据,则A端会再次重传该数据。具体讲解如下视频:
停止等待
2、
下面是关于:确认丢失、确认迟到
- 确认丢失:B端向A端 发送的确认信息 丢失了,则A端也就没收到B端的确信信息,A端会从新发送该段数据给B端;
- 确认迟到:B端向A端 发送的确认信息 可能从其他较远的路线传送了,而导致确认信息 发送迟到了,则A端也就没收到B端的确信信息,A端会从新发送该段数据给B端;而当迟到的确认信息 终于发送给A端之后,A端只是收到该段迟到的确认信息,但什么也不会做。
使用上述的确认和重传机制,我们就可以在 不可靠的传输网络上实现可靠的通信。
这种可靠传输协议常称为 自动请求ARQ(Automatic Repeat reQuest)。
ARQ表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。
10.3 信道利用率
停止等待协议的优点是简单;缺点是信道利用率太低。

假设A和B之间有一条直通的信道来传送分组。
- 假定A发送分组需要的时间是
T``D。显然,T``D等于分组长度除以数据率。 - 再假定分组正确到达B后,B处理分组的时间可以忽略不计,同时立即发回确认。
- 假定B发送确认分组需要时间
T``A。
如果A处理确认分组的时间也可以忽略不计,那么A在经过时间(T``D`` +RTT+T``A)后就可以再发送下一个分组,这里的RTT是往返时间。因为仅仅是在时间T,内才用来传送有用的数据(包括分组的首部),因此信道的利用率U可用下式计算:
如何提高信道利用率?
根据上面的公式可知,增大T``D就可以提高新到利用率。
发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。由于信道上一直有数据不间断地传送,这种传输方式可获得很高的新到利用率。
流水线传输
10.3.1 连续ARQ协议
下面来讲 流水线传输的可靠传输是如何确认的:使用滑动窗口技术

- 上图表示发送方维持的“发送窗口”,它的含义是:位于发送窗口内的5个分组都可连续的发送出去,而不需要等待对方的确认。
这种是每一个数据报都需要一个确认,之后,才能在发送之后的数据包。这种形式效率还是不够高。我们还可以进行“累积确认”来提高效率。
接收方一般采用“累计确认”的方式。
TCP的全部功能都体现在它首部中各字段的作用。
TCP报文段首部中的 前20个字节是固定的,后面有4n字节是根据需要而增加的选项(n为整数)。因此TCP首部的最小长度为20字节。
首部固定部分各字段的意义如下:
- 源端口、目的端口:各占2个字节,分别写入源端口号和目的端口号。和前面图5-6所示的 UDP的分用相似,TCP的分用功能也是通过端口实现的。
- 序号(seq):4个字节。也称为“报文段序号”。
序号增加到232-1后,下一个序号就又回到0。也就是说,序号使用mod 23运算。
在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。
- 例如,一报文段的序号字段值是301,而携带的数据共有100字节。这就表明:本报文段的数据的第一个字节的序号是301,最后一个字节的序号是400。
- 显然,下一个报文段(如果还有的话)的数据序号应当从401开始,即下一个报文段的序号字段值应为401。这个字段的名称也叫做“报文段序号”。
- 确认号:4字节。是期望收到对方下一个报文段的第一个数据字节的序号。
如,B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A 的确认报文段中把确认号置为701。请注意,现在的确认号不是501,也不是700,而是 701。
所以,有:
- 数据偏移:占4位。简单来说,就是记录TCP报文段从首部开始第几个字节之后开始是数据段。
这4位,最大为
1111 = 15(注意,假设数据偏移的值为1,则它代表 14字节 = 4字节。他的单位是4字节。),则154字节 = 60字节,即数据偏移大表示偏移60字节。 所以,可以算出“选项”处做多为:60-20=40字节
- 保留:占6位,保留为 今后使用。但目前应置为0
紧急URG (URGent):当URG= 1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序来传送。
例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消该程序的运行。因此用户从键盘发出中断命令(Control + C)。如果不使用紧急数据,那么这两个字符将存储在接收TCP的缓存末尾。只有在所有的数据被处理完毕后这两个字符才被交付接收方的应用进程。这样做就浪费了许多时间。
确认ACK(ACKnowledgment):仅当ACK=1时确认号字段才有效。当ACK = 0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
推送 PSH (PuSH):当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP 就可以使用推送(push)操作。
这时,发送方TCP把PSH 置1,并立即创建一个报文段发送出去。接收方TCP收到PSH =1的报文段,就尽快地(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位RST (ReSeT):当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可称为重建位或重置位。
同步SYN(SYNchronization):在连接建立时用来同步序号。
当SYN= 1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此,SYN 置为1就表示这是一个连接请求或连接接受报文。关于连接的建立和释放,在后面还要进行详细讨论。
终止FIN(FINis,意思是“完”、“终”):用来释放一个连接。当FIN= 1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
- 窗口:指发送本报文段的以外的接收窗口(而不是自己的发送窗口)。
窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。
- 检验和:2字节。检验和字段检验的范围包括首部、数据这两部分。
- 紧急指针:2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数。
选项:长度可变,最长可达40字节。当没有使用“选项”时,TCP的首部长度为20字节。
“选项”可以规定最大数据报的长度是多少
- 从转包工具中看到的
MSS(maximum seqment size) 就是表示的最大数据报的长度。 - 还可以指定数据报的大小是否为选择性确认时,使用
SACK来表示。
SACK被设为permitted,则表示 是选择性确认。- 从转包工具中看到的
填充:如果“选项”不够4字节,则“填充”会补齐。也就是说“选项+填充 = 4个字节”。
10.5 抓包分析TCP首部
备用视频:bilibili中的http://www.91xueit.com/


