TCP/IP
Air_lml
这个作者很懒,什么都没留下…
展开
-
网络编程模型的演进之路
在没有IO多路复用的模型的情况下,为了支持高并发采取以下网络模型一:阻塞IO+多线程client连接服务器,服务器有一个线程阻塞的调用accept,accept接收到连接后,创建一个线程来读写读写,并且处理业务逻辑阻塞IO不能充分利用CPU,后面就出现了reactor模型二:reactor模型特点:1:非阻塞IO+IO多路复用(此处的IO多路复用采用的是epoll模型,关于为何选用epoll,可以看下以前的一篇文章https://blog.csdn.net/l1008610/原创 2020-12-13 00:26:56 · 164 阅读 · 0 评论 -
多层面剖析TCP跟UDP的差别
1:数据层:TCP是基于数据流,UDP是基于报文传输2:数据开销:tcp的包头部是20个字节,UDP的头是8个字节3:可靠性:tcp是可靠的,丢包后有重传,乱序后有重组,UDP仅仅是发送报文,不管序列与丢包4:发送速率:tcp的发送有慢启动,滑动窗口控制,发送前还得三次握手建立连接,udp可以直接发送,相对来说udp的发送速率会更高5:应用开发:TCP接收的包并不一定是完整的,需要处理毡包问题,UDP每个数据包都是完整的,不会进行分片重组6:安全性:tcp的握手可以被利用,典型的就是do原创 2020-12-09 21:28:41 · 101 阅读 · 0 评论 -
图解滑动窗口与拥塞控制
一:滑动窗口首先看下TCP的头部结构,里面有个窗口大小的选项,占位2个字节,说明滑动窗口最大的发送大小为65535(2^16 - 1)字节,也就是64K,当前也可以通过选项字段进行放大.tcp发包是通过对方设置的滑动窗口控制发包的速率,如上,1-4表示已经发送并确认的包,5-7表示已经发送,但是对方未确认的,8-11,表示准备发送的,12-15表示还未发送,滑动窗口的范围仅仅是5-11。例如:发送5-7的包,发送时,会将5-7的包拷贝一份放入重传缓冲区,开启定时器重传(此处的重传是个慢.原创 2020-12-09 21:15:54 · 354 阅读 · 0 评论 -
从soket函数角度看TCP三次握手
三次握手的过程很简单,首先客户端发送syn包给服务器,客户端处于syn_send状态,服务器收到syn包后给客户端回复一个ack包,服务器处于syn_recv状态,客户端收到ack后,给服务器发送一个ack包,客户端处于established状态,服务器收到ack后也将状态置为etablished状态。里面涉及到几个socket通信的函数调用所处的状态1:Listen处于客户端调用connect之前,服务器开启端口监听模式,此处的Listen还有一个考察点,就是int listen(int fd, ..原创 2020-12-09 00:14:50 · 144 阅读 · 0 评论 -
关于同一条TCP链接数据包到达顺序的问题
以前作者也一直以为数据包先发的不一定先到,直到今天才意识这个问题的缺陷,数据包是不一定先发先到,但是对于TCP有一点特殊,若我们接受的数据包是在应用层,并且应用层用的是TCP的传输协议的话,这个顺序是保证,这个顺序的保证是在传输层保证的,举个例子:client发生数据A,B给server,使用的TCP传输,client发送毫无疑问是先发送A,然后发送B,但是有些搞网络的同学可能会有这个疑问,A原创 2016-08-13 09:38:28 · 2363 阅读 · 1 评论 -
TCP数据传输
分析TCP的数据传输过程出现的错误就得先知道TCP传输的原理send ->SOCKET缓冲区->通过OSI顺序进行封包->网卡缓冲器->发送到网络中->网卡接受(目的地非目标主机则扔掉)->OSI解包->SOCKET缓冲区->recv书上说的TCP是可靠传输,若数据包在上面那个流程丢了,源主机没有在规定的时间收到目的主机的回复,就会按照重传时间进行重传,注意若网络环境不好的话肯定的丢包,你原创 2020-12-07 23:14:45 · 359 阅读 · 0 评论