🌸I could be bounded in a nutshell and count myself a king of infinite space.
特别鸣谢:木芯工作室 、Ivan from Russia
TCP------打电话----可靠有序、不丢不重复--------提供全双工-------------发送接收缓存----------面向字节流--------搬砖一样加个头运走
TCP首部格式-----源端口目的端口一共4B-------序号字段(报文第一个字节的序号)--------确认号(期待收到的内容的第一个字节的序号)-------以4B单位
数据偏移--------首部长度–4B为单位-------URG–urgent紧急位–有紧急情况可以插队处理(发送方)---------配合紧急指针字段使用----------确认位ACK=1有效----------建立连接后ACK必须为1---------PSH=1(接收端插队)------RST复位------TCP出现严重偏差必须释放连接—再重新连接-------------同步SYN=1—表明是一个请求/接受报文----------------终值位FIN----表明报文段发送方已经发完要求释放连接
窗口—表明接收窗口允许发送方发送的数据量----根据这个设置发送缓存------------检验和-----和IP报文一样—先加上12B的伪首部—计算完去除-------选项–额外的选项
TCP连接管理
TCP连接管理-----B/S方式-------
三次握手---------1.客户端发送连接请求报文段SYN=1,seq=x随机------------------------------2.服务器为TCP分配缓存和变量,并返回确认报文SYN=1,ACK=1,seq=y随机,ack=x+1(序号想收到的)------------------------3.客户端为TCP分配缓存和变量,返回确认SYN=0,ACK=1,seq=x+1,ack=y+1
SYN洪范攻击-------黑客发送第一个确认包-------服务器一直发送确认等待确认---------服务器也分配了缓存和变量--------导致服务器资源耗尽--------------------解决方法设置 SYN cookie
TCP的连接释放------------四次握手-------1.服务端发送释放报文连接FIN=1,seq=u(报文段第一个字节的序号一般没有,为0)------------2.服务器返回一个确认报文,客户到服务器这个方向就关闭了(半关闭)ACK=1,seq=v,ack=u+1-----------------3.服务器发送连接释放报文FIN=1,ACK=1,seq=w,ack=u+1-----------------4.客户端回复确认 等待2MSL----最长报文段寿命后彻底关闭—万一对方没收到可以重传----ACK=1,seq=u+1,ack=w+1
TCP可靠传输-------校验—伪首部、序号、确认、重传
网络层------------不可靠-----------最大努力交付----------------用tcp来保证----------如果用了UDP-------------只能应用层来保证可靠传输了---------------------实际发送用报文段来传输-------不是纯依靠字节流和序号
确认----接收方返回确认报文---------也可以捎带着自己要发的信息-------序号写下次期待收到的----------如果456丢了,但是78到了,也会返回期待收到4号
重传--------超时重传------RTTs—自适应算法—加权的平均往返时间------------可能会等太久了!!!----------冗余ACK----------发送方收到3个对于某个序号的冗余ACK---------认为报文丢失,重传此号报文-------------------快速重传
TCP流量控制-------让发送方慢点---------滑动窗口-------动态调整发送方的窗口大小----通过回传的确认报文段的窗口字段--------------发送窗口 选取------------接收窗口rwnd 拥塞窗口cwnd的最小值
TCP流量控制过程--------收到对方的0窗口通知,启动持续计时器--------持续计时器时间到就发送零窗口探测报文------------接收方收到给出现在的窗口值----------------如果再是0继续计时
TCP拥塞控制-------资源供应不足、全局性性能变差------------过多数据注入网络------------全局性
拥塞控制4算法---------慢开始–拥塞避免–快重传–快恢复-----------拥塞窗口—发送方设置
慢开始------开始设置cwnd=1,---------随后每次指数增加------一个往返时延RRT—传输伦次---------------------------指数 到 加法 增加—拥塞避免(线性增加)
之前一旦遇到拥塞-----------设置新的门限值—ssthresh—发生拥塞时候大小的一半--------------------到了门限值就线性增大
之前直接回到慢开始