
深入浅出TCP/UDP
本文以通俗易懂,并且覆盖大量有关UCP和TCP的知识点,例子图文来阐述TCP和UDP在开发过程中各自的机制和优缺点。
高司机
公众号:游戏开发司机 资深游戏服务器,曾就职IBM LSF,淘米网,网易雷火
-
原创 (一)深入浅出TCPIP之理解TCP报文格式和交互流程
目录1.引入TCP: 1.1 TCP用户代码2. TCP数据报文格式3 TCP栈及socket的初始化4. 服务器端bind和listen的实现4.1sockaddr与sockaddr_in结构体4.2网络字节序5.服务器墙accept的实现6.客户端connect的实现(发起三次握手)1.引入TCP: TCP和UDP是完全迥异的传输层协议,被设计为做不同的事情。二者的共性是都使用IP作为其网络层协议。TC...2020-10-30 12:17:071757
5
-
原创 (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上)
TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,而用三次握手恰恰可以满足以上两方面的需求!1.三次握手 所谓的三次握手即TCP连接的建立。这个连接必须是一方主动打开,另一方被动打开的。1.1 三次握手过程 握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段。随后开始“三次握手”:(1)首先客户端向服务器端发送一段TCP报文,其中:标记位为SYN,表示“...2020-10-30 18:19:431521
10
-
原创 (三)深入浅出TCPIP之再识TCP,理解TCP四次挥手(上)
目录1.TCP四次挥手过程2.挥手连环发问 上篇文章对于"三次握手”做了说明。本节我们对不常听见的“四次挥手”为大家详尽, 直观,完整地绍“挥手”的过程。所谓的四次挥手即tcp连接的释放(解除)。连接的释放必须是一方主动释放,另一方被动释放。以下为客户端主动发起释放连接的图解:1.TCP四次挥手过程TCP连接的释放一共需要四步,因此称为『四次挥手』。我们知道,TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接...2020-10-30 18:19:59477
3
-
原创 (四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析
目录1. 通过netstat来分析服务器和客户端的TCP状态2.通过tcpdump抓包分析服务器和客户端的TCP状态2.1 语法2.2 抓包返回格式2.3 抓包的FLags标记2.4 分析三次握手,数据收发,四次挥手的状态2.4.1三次握手2.4.2数据发送2.4.3 四次挥手我们在第二章和第三章讲了三次握手和四次挥手,那么这一章节我将带领读者来通过tcpdump工具来抓包分析这两个过程。按照我第一章文章里初识TCP,理解TCP报文格式和交互流程(一)提供的客户.2020-10-30 18:20:10466
5
-
原创 (五)深入浅出TCPIP之TCP流量控制
目录TCP流量控制滑动窗口固定窗口和滑动窗口如何告知发送方窗口大小滑动窗口细节实例注意流量控制和拥塞控制的区别:连环发问TCP流量控制 我们都知道TCP是一种可靠的,面向连接的传输层协议。我们总是希望TCP能够传输的数据越快越好。如果存在这样一种情况,发送方数据发送的非常快,而且接收方耗尽自己的资源也根本来不及接收,那这些多余的数据就会被丢弃,这就违背了TCP可靠的宗旨了。 所以就需要引入一种流量控制的手段:让发送方不要发送太快,既让接收方能够顺利接收数据2020-10-30 18:24:25708
2
-
原创 (六)深入浅出TCPIP之TCP拥塞控制
目录什么是网络拥塞如何避免拥塞拥塞点避免拥塞慢启动算法算法思想慢启动解析启动过程拥塞避免算法启动过程快速重传算法快速恢复总结连环发问:专栏其他文章:(一)深入浅出TCPIP之理解TCP报文格式和交互流程 (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上)(三)深入浅出TCPIP之再识TCP,理解TCP四次挥手(上)(四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析(五)深入浅出TC...2020-10-30 18:23:19365
1
-
原创 (七)深入浅出TCPIP之深入浅出TCPIP之TCP重传机制
TCP重传机制TCP要保证所有的数据包都可以到达,所以,必需要有重传机制。注意,接收端给发送端的Ack确认只会确认最后一个连续的包,比如,发送端发了1,2,3,4,5一共五份数据,接收端收到了1,2,于是回ack 3,然后收到了4(注意此时3没收到),此时的TCP会怎么办?我们要知道,因为正如前面所说的,SeqNum和Ack是以字节数为单位,所以ack的时候,不能跳着确认,只能确认最大的连续收到的包,不然,发送端就以为之前的都收到了。超时重传机制一种是不回ack,死等3,当发送方发现收不到32020-11-05 11:00:30462
1
-
原创 (八)深入浅出TCPIP之TCP长连接与短连接详解
TCP 本身并没有长短连接的区别,长短与否,完全取决于我们怎么用它。2020-10-30 18:48:16339
1
-
原创 (九)深入浅出TCPIP之网络同步异步
在网络同步中,有两种同步方式,分别为同步与异步。同步的操作指的是,当所有的操作请求都做完,才将结果返回给用户,用户才能进行下一个操作,这样就会让用户有一种卡顿的感觉,因为需要等待上一步操作的执行结果。异步操作指的是,用户的操作之间不需要进行等待,而是在服务端设置一个消息队列,保存用户的每一步的操作,因此用户不会有卡顿的感觉。2020-10-31 11:31:05515
3
-
原创 (十)深入浅出TCPIP之网络阻塞和非阻塞
专栏其他文章:(一)深入浅出TCPIP之理解TCP报文格式和交互流程 (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上)(三)深入浅出TCPIP之再识TCP,理解TCP四次挥手(上)(四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析(五)深入浅出TCPIP之TCP流量控制(六)深入浅出TCPIP之TCP拥塞控制(七)深入浅出TCPIP之深入浅出TCPIP之TCP重传机制(八)深入浅出TCPIP之TCP长连接与短连接详解...2020-10-31 11:27:59275
1
-
原创 (十一)深入浅出TCPIP之TCP粘包问题
目录粘包和拆包问题保护消息边界和流粘包、拆包场景为什么会发生TCP粘包、拆包呢?如何处理粘包、拆包问题?怎样封包和拆包?其他问题TCP为什么引入接受缓存这个数据结构?专栏其他文章:理论篇:(一)深入浅出TCPIP之理解TCP报文格式和交互流程(二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上)(三)深入浅出TCPIP之再识TCP,理解TCP四次挥手(上)(四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析...2020-11-05 16:42:44281
1
-
原创 (十二)深入浅出TCPIP之Nagle算法
TCP的数据流大致可以分为两类,交互数据流与成块的数据流。交互数据流就是发送控制命令的数据流,比如relogin,telnet,ftp命令等等;成块数据流是用来发送数据的包,网络上大部分的TCP包都是这种包。很明显,TCP在传输这两种类型的包时的效率是不一样的,因此为了提高TCP的传输效率,应该对这两种类型的包采用不同的算法。总之,TCP的传输原则是尽量减少小分组传输的数量。2020-11-02 10:52:44198
1
-
转载 (十三) 深入浅出TCPIP之TCP套接字参数
2020-11-05 11:00:12160
0
-
原创 (十四)深入浅出TCPIP之初识UDP理解报文格式和交互流程
目录关于UDP代码示例UDP数据报格式再次理解UDP数据包(1)UDP报文大小的影响因素,主要有以下3个(2) UDP数据包最大长度(3) UDP数据包理想长度UDP数据包的发送和接收问题(1) UDP的通信有界性(2) UDP数据包的无序性和非可靠性(3) UDP数据包的接收(4) UDP包分片问题UDP丢包问题[1] UDP socket缓冲区满造成的UDP丢包[2] UDP socket缓冲区过小造成的UDP丢包[3] ARP缓存过期导致2020-11-02 17:20:44758
5
-
原创 (十五)非常全面的TCPIP面试宝典-进入大厂必备总结
TCP 作为传输层的协议,是一个IT工程师素养的体现,也是面试中经常被问到的知识点。在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位。2020-11-10 17:35:19925
7
-
原创 (十六)深入浅出TCPIP之Hello CDN
什么是CDNCDN 其实是 Content Delivery Network 的缩写,即“内容分发网络”。CDN是将媒体资源,动静态图片(Flash) ,HTML, CSS, JS等等内容缓存到距离你更近的互联网数据中心,从而让用户进行共享资源,实现缩减站点间的响应时间等等需求。CDN的起源CDN 诞生于二十多年前,随着骨干网压力的逐渐增大,以及长传需求的逐渐增多,使得骨干网的压力越来越大,长传效果越来越差。于是在 1995 年,MIT 的应用数学教授 Tom Leighton 带领着研究.2020-11-06 15:02:49255
1
-
原创 (十七)深入浅出TCPIP之UDP打洞原理
什么是打洞,为什么要打洞由于Internet的快速发展 IPV4地址不够用,不能每个主机分到一个公网IP 所以使用NAT地址转换。下面是我在网上找到的一副图一般来说都是由私网内主机(例如上图中“电脑A-01”)主动发起连接,数据包经过NAT地址转换后送给公网上的服务器(例如上图中的“Server”),连接建立以后可双向传送数据,NAT设备允许私网内主机主动向公网内主机发送数据,但却禁止反方向的主动2017-11-10 09:45:041385
1
-
原创 (十八)深入浅出TCPIP之HTTP和HTTPS
专栏其他文章:理论篇:(一)深入浅出TCPIP之理解TCP报文格式和交互流程(二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上)(三)深入浅出TCPIP之再识TCP,理解TCP四次挥手(上)(四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析(五)深入浅出TCPIP之TCP流量控制(六)深入浅出TCPIP之TCP拥塞控制(七)深入浅出TCPIP之深入浅出TCPIP之TCP重传机制(八)深入浅出TCPIP之TCP长连接...2020-11-17 18:20:22112
0
-
原创 (二十)深入浅出TCPIP之epoll的一些思考
Epoll基本介绍在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:2013-01-06 09:45:066665
1
-
原创 深入浅出TCPIP之实战篇—用c++开发一个http服务器(二十一)
专栏其他文章:(一)深入浅出TCPIP之理解TCP报文格式和交互流程(二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上)(三)深入浅出TCPIP之再识TCP,理解TCP四次挥手(上)(四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析(五)深入浅出TCPIP之TCP流量控制(六)深入浅出TCPIP之TCP拥塞控制(七)深入浅出TCPIP之深入浅出TCPIP之TCP重传机制(八)深入浅出TCPIP之TCP长连接与短连接详解...2020-11-12 13:32:234823
39