传输层(TCP/UDP)

传输层的功能

图片说明

TCP和UDP各自的使用场景

TCP(Transmission Control Protocol,传输控制协议)协议。
UDP(User Data Protocol,用户数据报协议)协议。

TCP

  1. 需要将要传输的文件分段传输(所以需要建立会话,如果数据丢失要让服务器再重传一遍)
  2. 建立会话 (客户端得记着已经收了几个数据包了,直到传输完成,结束会话)
  3. 可靠传输
  4. 流量控制(客户端接收不过来,告诉服务器等会儿再传)

UDP

  1. 一个数据包就能够完成数据通信,不需要分段
  2. 不需要建立会话
  3. 不需要流量控制
  4. 不可靠传输 (没收到就重新再传一遍)
    比如:在将域名解析成IP地址时,向DNS发送请求(一个数据包就行)时就用的是UDP(不需要建立会话)---域名解析就是UDP
    QQ聊天,也是UDP协议
    传一个500M的文件的时候,用的是TCP协议
    发电子邮件,用的是TCP协议;ftp下载文件也是TCP协议
    屏幕广播,多播,广播都是用的UDP(虽然一个数据包完不成,但是它不建立会话,也不保证传输的可靠性)
    查看会话:netstat -n(不可能看到UDP,因为UDP不建立会话)
    查看建立会话的进程:netstat -nb

传输层协议和应用层协议之间的关系

TCP/UDP可以加一个端口号,来标识应用程序

   常见的应用层协议使用的端口
   http=TCP+80
   https=TCP+443
   RDP=TCP+3389    //远程桌面
   ftp=TCP+21      
   共享文件夹=TCP+445
   SMTP=TCP+25    //发邮件
   POP3=TCP+110   //收邮件
   telnet=TCP+23   
   SQL=TCP+1433   //微软的SQL Server
   DNS=UDP+53

服务和应用层协议之间关系

  1. 服务使用TCP或UDP的端口侦听客户端请求(侦听:迎宾——这个服务开启了才会侦听)
  2. 客户端使用IP地址定位服务器 使用目标端口,定位服务
  3. 可以在服务器网卡上设置只开放必要的端口,实现服务器网络安全

如何在Windows上安装服务 (安装-开启)可以通过
DNS服务
Web服务
SMTP
POP3服务
如何查看侦听的端口:
netstat -an 查看服务侦听的端口
netstat -n 查看建立的会话
netstat -nb 查看建立会话的进程
telnet 192.168.80.100 3389 测试远程计算机某个端口是否打开

传输层为相互通信的应用进程提供了逻辑通信

传输层实现程序到程序(通过TCP加端口)
网络层实现服务器到服务器,地址到地址
图片说明
传输层协议和网络层协议的主要区别:
图片说明
每一层都会通过某个方式来区分上一层
网络层通过协议号来区分传输层是TCP还是UDP(协议号 TCP 6 UDP 17 IGMP 1)
传输层通过端口来区分应用层的应用
图片说明

TCP的端口

端口用一个 16 位端口号进行标志。0-65535
端口号只具有本地意义(本地计算机中各个端口是唯一的),即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。
熟知端口 0-1023

TELNET:23
SMTP:25
DNS:53
HTTP:80
https:443
RDP:3389

登记端口 1024-49151
客户端端口 49152-65535

传输层协议(TCP/UDP)

UDP

UDP的主要特点
UDP 是无连接的,即发送数据之前不需要建立连接。

UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。

UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。UDP用户数据报

UDP 支持一对一、一对多、多对一和多对多的交互通信。

UDP 的首部开销小,只有 8 个字节。

图片说明

UDP 的首部格式

图片说明
在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。

TCP

TCP特点:
TCP 是面向连接的传输层协议。在传输之前需要确保已经连接了(打电话的喂?)
每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
TCP 提供可靠交付的服务。
TCP 提供全双工通信(同时收和发的通讯,A和B打电话:A在说,也需要B反馈,嗯!明白了!/嗯?什么?)。
面向字节流

TCP需要实现流量控制(服务器发送的太快,客户端处理不过来,所以客户端需要让服务器等会儿)、拥塞控制(两端都正常,但是传输过程中出现的拥堵导致数据丢失)

TCP是面向字节流的

图片说明

TCP 把连接作为最基本的抽象。

每一条 TCP 连接有两个端点。从一个ID+端口到另一个IP+端口(IP地址+端口------------->IP地址+端口)

TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是传输层的协议端口。TCP 连接的端点叫做套接字(socket) 。

端口号拼接到IP 地址即构成了套接字。
图片说明

TCP可靠传输的工作原理——停止等待协议

图片说明
图片说明
确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reQuest)。
ARQ 表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组 。
但是,停止等待协议的优点是简单,但缺点是信道利用率太低。
提高信道利用率的方法:流水线传输(发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。)
图片说明
那流水线传输怎么保证可靠传输呢?
下面看一个连续ARQ协议:
图片说明
滑动窗口技术:(可靠的流水线传输)
连续发5个,然后等收到1的确认包之后再发送数据6,1就可以丢掉了
接收方可以采用累积确认:
如果收到了数据1,2,3,那我只发个3的确认包,如果收到了1,2,4,那我就发个2的确认包,那发送方就会重新发送3以及后面的

TCP报文段的首部格式

目标端口和源端口:各占两个字节
序号:文件被分成好多部分进行传输,序号就是这个数据段的第一个字节在文件中的第几个字节,序号占4个字节
确认号:接收方返回的时候要告诉发送方下面要发几号数据段了
数据偏移:TCP的首部并不是固定长度的(有20个字节的固定首部),还有一个选项,长度是可变的,所以会有一个数据偏移来告诉对面我的首部到哪儿结束。数据偏移占4个二进制(最大是15,1代表4位,也就是TCP的首部最大有154=60个字节)选项部分最多有40个字节
保留:6位二进制(没有用)
URG:发送插队标记位(二进制,为1的话表示我这个数据包不需要排队,直接传)如果想要告诉对面别传了,一般要等到前面几个包传完了才能排的上我,但是加上URG就可以直接传,不需要排队了
PSH:接收插队标记位,为1的话,这个数据包到达对面后直接排到最前面
ACK:二进制,如果是0的话,确认号无效,如果是1的话,确认号才有效
SYN:建立会话标记(发起的时候=1)(之后再传的时候就等于0了)
在客户端向服务器发送建立会话请求时候SYN=1,发送请求的时候,ACK=0(还没开始发送呢),这个时候确认号和序号都为0;
服务器接收到请求之后,再给客户端发送的时候,SYN=1,这个时候要确认我收到你发的请求了,所以ACK就=1,而且,确认号=1,序号=0
RST:RST为1的话表明TCP会话出现的严重异常,需要释放连接(正在通讯的时候,停止了,这个时候RST就置为1,需要再重新建立连接)
FIN:数据全都传完了,FIN=1,表明要释放连接了
*
序号是我发的数据的第一个;确认号是告诉对面我已经收到了前面的,你接下去应该从哪儿开始发**
窗口:通知对方我的缓存区最大能放多少个字节window size,我能支持的最大的数据包MSS
校验和(与UDP一样,TCP的报文段前面有一个12个字节伪首部,是用来计算校验和的,这里的协议号是6)
紧急指针:只有当URG为1的时候才有效,指明紧急数据结束的位置
选项:有些数据包里有选项,可以规定最大数据报是多大MSS,是否支持选择性确认

图片说明

全部评论

相关推荐

程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
07-17 12:07
门头沟学院 Java
勇敢牛牛不怕困难
投递OPPO等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务