osi 传输层 - yaokun123/php-wiki GitHub Wiki

一、传输层协议TCP和UDP

1、TCP(Transmission Control Protocol)传输控制协议。

需要将传输的文件分段 建立会话 可靠传输 流量控制

2、UDP(User Data Protocol)用户数据包协议

一个数据包就能够完成数据通信 不需要建立会话 不可靠传输 不需要流量控制

3、传输层协议与应用层协议的关系

http = tcp + 80
https = tcp + 443
RDP(远程桌面) = tcp + 3389
ftp = tcp + 21
共享文件夹 = tcp + 445
SMTP(发邮件) = tcp + 25
POP3(收邮件) = tcp + 110
telnet = tcp + 23
dns = udp + 53

服务和应用层的关系
    服务使用TCP或UDP的端口监听客户端的请求
    客户端使用IP地址定位服务器,使用目标端口定位服务
    可以在服务器网卡上设置只开放必要的端口,实现服务器网络安全

二、TCP可靠传输的实现

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

确认丢失和确认迟到

可靠通信的实现
使用上述确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
在这种可靠传输协议常称为自动重传请求ARQ(Automatic Repeat reQuest)
ARQ表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。

信道利用率-停止等待协议

流水线传输

连续ARQ协议

累计确认

接收方一般采用累积确认的方式
有点是:容易实现,信道利用率高
缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息

TCP报文段的首部格式

源端口:
目的端口:
序号:这个段的第一个字节是整个文件的第多少个字节
确认号:下一个数据包该发第多少个字节
数据偏移:确定TCP首部有多长
保留:没用
---------------------------------------------------------
URG:告诉计算机数据加急传输,不要再排队(例如传输文件contrl+c)发送端插队
ACK:0表示确认号无效,1表示确认号有效
PSH:接收端插队
RST:1代表会话出现错误,释放连接
SYN:1代表是建立会话的数据包(SYN攻击器、Land)
FIN:1代表是要发送的最后一个数据包
---------------------------------------------------------
窗口:接受/发送缓存大小
检验和:校验首部和数据两部分
紧急指针:URG为1的时候才有用,数据包中前多少个字节是要紧急处理的
---------------------------------------------------------
选项/填充:可选的(包含选择性确认)

TCP如何实现可靠传输

以字节为单位的滑动窗口技术

超时重传时间的选择

五、TCP的流量控制

通过接收端告诉发送端接受窗口有多大(不断调整窗口大小来实现)

六、TCP的拥塞控制

拥塞控制的一般原理

出现拥塞的条件:
    对资源需求的总和  > 可用资源

拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,
以及与降低网络传输性能有关的所有因素

流量控制装置往往指在给定的发送端和接受端之间的点对点通信量的控制,
它所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接受。

拥塞控制所起的作用

慢开始和拥塞避免

发送方维持拥塞窗口cwnd(congestion window)

发送方控制拥塞窗口的原则是:
    只要网络没有出现拥塞,拥塞窗口就再增加一些,以便把更多的分组发送出去。
    只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

注意:
拥塞避免并非指完全能够避免了拥塞,利用以上的措施要完全避免网络拥塞还是不可能的。
拥塞避免是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞

慢开始算法的原理

慢开始和拥塞避免算法的实现举例

七、TCP的运输连接管理

传输连接有三个阶段,即:连接建立、数据传送、连接关闭
tcp连接的建立都是采用客户端服务器方式
主动发起连接建立的应用进程叫做客户端(client)
被动等待连接建立的应用进程叫做服务器(server)

TCP用三次握手建立连接
SYN=1,ACK=0(确认标记无用),seq=x(序号)
SYN=1,ACK=1,seq=y,ack=x+1(确认号)
SYN=0,ACK=1,seq=x+1,ack=y+1