
tcp
文章平均质量分 84
TCH_world
记录职业生涯的点滴
展开
-
Portal认证
portal认证简介大家在商场使用商场提供的wifi时,连接上来就会弹出一个页面,页面由一键认证、微信认证、web认证、qq认证。说白了就是连接wifi时弹出一个广告页面。原理手机、平板连上wifi后一般会发网络探测包,android系统会发网络探测包检查网络是否正常,苹果设备连接不加密的wifi时要得到苹果服务器的许可,portal认证就是抓住这两点,把手机、平板的网络探原创 2017-07-23 15:59:18 · 2876 阅读 · 0 评论 -
TCP拥塞控制
前一节分析了TCP流量控制,流量控制是接收端根据自身的自由限制(缓冲区大小、CPU处理性能)控制发送端端的数据包速率和大小,是点到点的通信质量控制。而拥塞控制是防止过多的数据包注入网络造成网络通信的阻塞,涉及网络中的交换机、路由器等资源的限制,所以拥塞控制是一个全局的过程,涉及整个网络的状况。拥塞控制主要冲三个方面介绍:慢启动、快速重传、快速恢复。1、慢启动/拥塞避免算法TCP的拥塞控制的...原创 2018-12-16 13:59:37 · 933 阅读 · 0 评论 -
TCP流量控制
TCP协议是可靠的协议,流量控制是考虑到接受端的限制,比如接受方缓冲区只有6000字节,那么发送端不能发送超过6000字节的报文,流量控制是接受端根据自身的情况而约束发送端的发送报文的速度和大小,流量控制使用的一个滑动窗口(rwnd),当TCP协议建立后接受端回复ACK报文中附加有滑动窗口,那么发送端不能发送超过滑动窗口的报文,当窗口大小为0时就表示接受端拒绝接受数据,发送端应该停止发送数据包。...原创 2018-12-15 23:58:21 · 1150 阅读 · 0 评论 -
TCP状态机图
TCP状态机图1、TIME_WAIT如上图tcp状态机的切换过程,其他的都好理解,这里只介绍以下TIME_WAIT,TIME_WAIT出现在主动发送FIN端,TCP是双向的、可靠的传输层协议,关闭一个TCP连接需要关闭两端,也就是TCP的四次挥手,当主机A发送最后一个ACK后就进入TIME_WAIT,这个时间大概是2min,这是一个数据包在网络中传输的大概时间,应为TCP是可靠的协议,为...原创 2018-12-06 21:03:32 · 1085 阅读 · 0 评论 -
TCP连接状态管理
TCP协议连接初始化后的状态管理和切换由tcp_rcv_sate_preocess函数完成,tcp_v4_recevie函数收到数据包后查看TCP协议头,区分是只含纯传送负载数据还是包含控制信息SYN、FIN、RST、ACK等的数据包。各种状态的数据包处理过程大部分在tcp_rcv_state_process函数中完成,除ESTABLISHE和TIME_WAIT这两个状态外。数据包到达后如果是CL...原创 2018-12-03 23:53:07 · 1309 阅读 · 0 评论 -
TCP层接受发送数据接口关系
tcp接受发送数据接口关系原创 2018-12-06 00:21:09 · 436 阅读 · 0 评论 -
TCP协议套接字层接受函数tcp_recvmsg
当用户进程通过信号得知打开的的套接字上有数据等待接受时,用户进程会调用receive或read系统调用读取套接字缓冲区上的数据,实际是调用tcp_recvmsg函数将数据包从内核地址空间复制到用户考地址空间。1、三个队列在介绍tcp_recvmsg函数之前先了解TCP协议存放数据包的三个队列:(1)sock数据结构中的sk_backlog队列简称backlog队列,在前面讲TCP协...原创 2018-12-01 13:14:03 · 1809 阅读 · 0 评论 -
TCP协议ESTABLISHED状态处理
TCP协议是可靠的、快速传递数据的协议,当套接字状态是ESTABLISHED状态表明两端已经建立连接,可以互相传送数据了,tcp_v4_do_rcv接受到数据后首先检查套接字状态,如果是ESTABLISHED就交给tcp_rcv_established函数处理具体数据接受过程。如果是LISTEN就由tcp_v4_hnd_req处理,如果是其他状态就由tcp_rcv_state+process处理,...原创 2018-12-05 00:02:06 · 18799 阅读 · 0 评论 -
tcp_v4_connect函数
tcp_v4_connect函数初始化一个对外的连接请求,创建一个SYN包并发送出去,把套接字的状态从CLOSE切换到SYN_SENT,初始化TCP部分选项数据包序列号、窗口大小、MSS、套接字传送超时等,下面分析tcp_v4_connect函数。 1、初始化工作输入参数sk:套接字指针。uaddr:对端ip和端口。addr_len:套接字地址长度。检查目的IP长度、协...原创 2018-12-02 23:52:22 · 1751 阅读 · 1 评论 -
TCP发送函数tcp_transmit_skb
上一篇介绍了TCP协议层和套接字层的接口tcp_sendmsg函数是将用户地址空间数据复制到内核地址空间,接下来的工作是交给tcp_transmit_skb函数向IP层发送数据包,tcp_transmit_skb发送的数据包有(1)重传数据包tcp_retransmit_skb。(2)探测路由最大传送单元数据包。(3)发送复位连接数据包(4)发送连接请求数据包(5)发送回答AC...原创 2018-12-02 18:07:32 · 2443 阅读 · 0 评论 -
TCP协议和套接字、IP层之间的接口
1、TCP和套接字层之间的接口TCP和套接字之间的接口数据结构是struct proto,这个结构体的元素是一系列的函数指针,从tcp_close到tcp_shutdown函数是tcp连接管理处理函数。TCP数据接受函数是tcp_recvmsg和tcp_v4_do_rcv函数实现。struct proto_tcp_prot定义如下:struct proto tcp_prot = { ....原创 2018-11-27 00:00:09 · 944 阅读 · 0 评论 -
TCP的Slow Path处理
TCP的Slow Path处是常规输入数据包的处理方式,根据套接字的状态来确定数据包的处理方式,在Slow Path处理方式中当套接字接受缓冲区已经满就不在接受新的Socket Buffer或当套接字忙(被其他进程锁住)时就将收到的数据包放入套接字阻塞等待队列backlog queue中,将数据包加入backlog queue队列的条件(1)、输入的数据包包含数据段,不是ACK段。(2)、...原创 2018-11-29 23:44:07 · 825 阅读 · 0 评论 -
TCP协议Fast Path
1、Fast PathLinux TCP/IP协议栈中,TCP曾有两条路径处理输入数据包:"Fast Path"、"Slow Path",Fast Path是内核优化TCP处理输入数据包方式,他是根据协议头来预定数据包的去向,Fast Path处理的条件是:(1)、收到的数据段中包含的是数据,不是ACK。(2)、数据段是顺序传送数据中的一个完整数据段,接受顺序正确。(3)、收到数据...原创 2018-11-29 22:46:44 · 2529 阅读 · 0 评论 -
TCP协议发送函数tcp_sendmsg
TCP协议发送过程的数据包来源有两种,第一是应用层产生的数据包需要复制到内核接受缓冲区由tcp_sendmsg函数完成,第二是TCP连接管理TCP协议层自己阐述的数据、数据包重传数据包,由函数tcp_transmit_skb完成。首先介绍tcp_sendmsg函数,tcp_sendmsg函数主要做了三件事情:(1)、将数据包复制到Socket Buffer中。(2)、把Socket BUf...原创 2018-12-02 15:39:09 · 2374 阅读 · 0 评论 -
TCP协议简介
1、TCP重传机制TCP协议是传输层可靠的传输协议,TCP可以保证数据包能完整准确地、按照正确的序列在网络上传送到目的地址,TCP通信前两端首先要建立连接,然后才能传输数据,TCP协议使用肯定回答和重传(PAR:Poisitive Acknowledgment with Re-transmission)机制来提供可靠数据传送功能。重传两个方面,一方面使用TCP协议传送数据后要等待接受方的回答信...原创 2018-11-25 12:27:12 · 455 阅读 · 0 评论 -
TCP协议接受IP层数据包过程
IP层函数ip_local_deliver函数处理对数据包处理接受后根据iphdr->protocol数据域中协议号在inet_protocol全局变量中查找传输层的接受函数,TCP协议的接受函数是tcp_v4_rcv,tcp_v4_rcv函数的功能主要包含两个方面:(1)、数据包合法性检查(2)、确定数据包是快速路径处理还是慢速路径处理下面分析tcp_v4_rcv函数的处理分析...原创 2018-11-28 23:31:42 · 734 阅读 · 0 评论 -
TCP协议关键数据结构
1、TCP协议头数据结构TCP协议头数据结构是struct tcphdr,定义在include/linux/tcp.h中,主要包含源端口、目的端口、协议长度、控制标志flags....struct tcphdr { __be16 source; //源端口 __be16 dest; //目的端口 __be32 seq; //数据段的起始序列号 __be32 ack_se...原创 2018-11-26 00:00:09 · 3540 阅读 · 0 评论 -
TCP协议time_wait
因为TCP连接是双向的所以只有两个放行的连接都关闭了这个连接才算终止,首先A主机发送控制信息FIN包给B主机关闭A主机到B主机放行的连接,然后B主机回复ACK包这时A主机到B主机放行的连接关闭,A主机不能向B主机发送数据,但B主机可以向A发送数据,因为B主机到A主机方向的连接没有关闭。接下来B主机向A主机发送FIN包请求关闭B主机到A主机方向的连接,当A主机回复ACK后完成TCP四次挥手,这时还有...原创 2018-12-16 15:51:37 · 270 阅读 · 0 评论