IP协议的作用范围是主机之间的通信,用协议号区分上层,而TCP,UDP是进程之间,用端口号区分上层.
计算检验和加伪首部
TCP
主要特点
TCP是面向连接的传输层协议。
每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)。
TCP提供可靠交付的服务。
TCP提供全双工通信。
面向字节流。
TCP把连接作为最基本的抽象。
每一条TCP连接有两个端点。
TCP连接的端点不是主机,不是主机的P地址,不是应用进程,也不是传输层的
协议端口。TCP连接的端点叫做套接字(socket)。
端口号拼接到IP地址即构成了套接字。
套接字=IP地址+端口号
TCP如何实现可靠传输
可靠传输的工作原理--停止等待协议
使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
这种可靠传输协议常称为自动重传请求ARQ(Automatic Repeat reQuest)。
ARQ表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。
停止等待的优点是简单,但缺点是信道利用率太低(信道利用率=发的时间/总时间)。
流水线传输 连续ARQ协议
累计确认
接收方一般采用累积确认的方式。
优点是:容易实现,信道利用率高。
缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。
TCP报文段首部格式
序号:数据部分第一个字节是整个数据的第几个,首次发送的序号一般采用ISN算法确定,也就是每隔几毫秒一个数+1
确认号:是下一个数据包应该是哪个序号
数据偏移:报文段多少开始是TCP数据部分,因为占4比特所以最高表示15,15*4=60.所以TCP首部最多60个字节,选项最多40个字节
保留:6位没有用的
URG:如果为1,不进缓存不排队,紧急指针有效,紧急指针内容不排队
ACK:如果是1,确认号有效
SYN:建立会话的时候,ack=0,syn=1,响应时ack=1,syn=1.
可以通过建立会话发送syn=1的报文段将服务器死机。
syn攻击就是随机不同源IP发送,而land攻击是让源IP等于目标IP
PSH:置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。
RST:置1时重建连接。如果接收到RST位时候,通常发生了某些错误,例如f5刷新。
FIN: 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。
窗口:告诉其发送缓存和接受缓存大小,发送窗口是由接受窗口决定的
检验和:和UDP一样,也要加伪首部,只是加的协议号不一样,运算方式一样
紧急指针:指明紧急数据包的尾部在哪
选项:指定序列包大小,支不支持选择性确认(SACK,就是告诉其哪一段缺了),时间戳...
建立会话:
第一次发出告诉服务器支持最大数据包,服务器响应发出支持最大数据包和缓存最大多少,然后再告诉服务器自己缓存最大多少,然后开始正式发送。
最接近真实的通信过程
以字节为单位的滑动窗口技术 环形缓冲区窗口
TCP的拥塞控制
出现资源拥塞的条件:
对资源需求的总和>可用资源
拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素
流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制,它所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
发送方维持拥塞窗口cwnd (congestion window)
发送方控制拥塞窗口的原则是:
只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。
只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
慢开始和拥塞避免算法
快重传
发送窗口=min(接收窗口(rwnd),cwnd)
TCP的传输连接管理
三个阶段:连接建立,数据传送,连接释放
TCP连接的建立都是采用客户服务器方式。
主动发起连接建立的应用进程叫做客户(client)。被动等待连接建立的应用进程叫做服务器(server)。
三次握手
连接释放 四次挥手