码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
Linux网络编程基础
TCP/IP
简述一下TCP建立连接和断开连接的过程。
三次握手:
内核体现
用户空间就是函数的执行
三次握手
Client(客户端)将标志位SYN置为1,随机产生一个数据包seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
Server收到数据包后由标志位ACK=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个数据包seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
Client收到确认后,检查ack是否为J1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
数据传输:
建立连接以后就是互相传输数据,ACK=上个数据包+1,再随机产生数据包互相传输
四次挥手:
内核空间:
TCP保证可靠性?
序列号、确认应答、超时重传
数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+一个偏差值。
窗口控制与高速重发控制/快速重传(重复确认应答)
使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接收1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发;但还有种情况有可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果是数据段丢失,接收端不会放过它的,会疯狂向它提醒…
TCP的三次握手和
四次挥手
的原因是什么?
为什么是三次握手?
为了防止已失效的连接请求报文段突然有送到了B,因而产生错误
假设两次握手时,A发出的第一个请求连接报文段在某一网络节点长时间滞留,以致延误到连接释放后才到达B。B收到失效的连接请求报文段后,认为是A又发出一次新的连接请求。于是向A发送确认报文段,同意建立连接,此时在假定两次握手的前提下,连接建立成功。这样会导致B的资源白白浪费
假设两次握手时,A发出一个请求报文段,但发送过后A就因为问题而导致下线。之后B收到了A发来的请求连接报文段,给A发送确认报文段,同意建立连接,此时在假定两次握手的前提下,连接建立成功。这样会导致B的资源白白浪费
为什么是四次挥手?
TCP协议是全双工通信
,这意味着客户端和服务器端都可以向彼此发送数据,所以关闭连接是双方都需要确认的共同行为
假设是三次挥手时,首先
释放了A到B方向的连接,此时TCP连接处于半关闭
(Half-Close)状态,这时A不能向B发送数据,而B还是可以向A发送数据。如果此时A收到了B的确认报文段后,就立即发送一个确认报文段,这会导致B向A还在发送数据时连接就被关闭。这样会导致A没有完整收到B所发的报文段
相关阅读:
[面试直通版]操作系统之锁、同步与通信(上)
计算机视觉与深度学习-卷积神经网络-卷积&图像去噪&边缘提取-卷积与边缘提取-[北邮鲁鹏]
Vue框架实现对前端数据表的增删改查(第六课)
抖音短视频实操:抖音热门视频的分类特点,如何选择视频内容(中)
驱动开发:内核枚举Minifilter微过滤驱动
【Java】有 A、B、C 三个线程,如何保证三个线程同时执行?在并发情况下,如何保证三个线程依次执行?如何保证三个线程有序交错执行?
初识 My Batis一 什么是My Batis,JDBC缺点,My Batis简化,Mapper 代理开发,My Batis 核心配置文件
Scratch游戏------打砖块(不用VIP)
AbstractBeanDefinition解读
报时机器人的rasa shell执行流程分析
原文地址:https://blog.csdn.net/liqifff/article/details/126884762
最新文章
【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
用 Hashids 优雅解决 C 端自增 ID 暴露问题
V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
LLVM Pass快速入门(四):代码插桩
milkup:桌面端 markdown AI续写和即时渲染
基于项目工程构建SBOM(软件物料清单)的研究
鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
.NET 中如何快速实现 List 集合去重?
扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
浅谈数据访问层
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
小工具
小游戏
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
京公网安备 11010502049817号