上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 30 下一页
摘要: 概述 本文对两个LINGER相关的套接字选项进行源码层面的分析,以更明确其各自的作用和区别; man page SO_LINGER,该选项是socket层面的选项,通过struct linger结构来设置信息,如果启用该选项,那么使用close()和shutdown()(注意:虽然manpage这么 阅读全文
posted @ 2019-10-28 13:15 AlexAlex 阅读(1826) 评论(0) 推荐(0) 编辑
摘要: 在调用close系统调用关闭套接字时,如果套接字引用计数已经归零,则需继续向上层调用其close实现,tcp为tcp_close;本文仅介绍tcp部分,前置部分请参考本博关于close系统调用的文章; 1 void tcp_close(struct sock *sk, long timeout) 2 阅读全文
posted @ 2019-10-28 13:11 AlexAlex 阅读(1018) 评论(0) 推荐(0) 编辑
摘要: 概述 shutdown系统调用在tcp层会调用两个函数,对于ESTABLISHED状态需要调用tcp_shutdown关闭连接,对于LISTEN和SYN_SENT状态则需要以非阻塞模式调用tcp_disconnect断开连接;本文除了对这两个函数进行分析以外,还会分析在shutdown关闭了读或者写 阅读全文
posted @ 2019-10-28 13:10 AlexAlex 阅读(949) 评论(0) 推荐(0) 编辑
摘要: 概述 本文主要对MSS相关的几个字段结合源码流程进行分析; 字段含义 user_mss(tcp_options_received)–用户配置的mss,优先级最高; mss_clamp(tcp_options_received)–对端通告的mss,即为对端能接受的最大mss,对端通告的mss与user 阅读全文
posted @ 2019-10-28 11:39 AlexAlex 阅读(1526) 评论(0) 推荐(0) 编辑
摘要: 假设两台设备双方均发送syn给对端,在发送syn之后状态处于SYN_SENT状态,此时双方均收到对端的发来的syn,则立即进入SYN_RECV状态,并且都向对端回复syn+ack,在收到syn+ack之后,连接从SYN_RECV状态切换到ESTABLISHED状态; 在发送syn进入SYN_SENT 阅读全文
posted @ 2019-10-28 11:33 AlexAlex 阅读(772) 评论(0) 推荐(0) 编辑
摘要: 假定客户端主动打开,发送syn包到服务器,服务器创建连接请求控制块加入到队列,进入TCP_NEW_SYN_RECV 状态,发送syn+ack给客户端,并启动定时器,等待客户端回复最后一个握手ack; tcp_v4_rcv上来的包,会判断连接状态,当状态为TCP_NEW_SYN_RECV时,期望得到对 阅读全文
posted @ 2019-10-28 10:33 AlexAlex 阅读(1156) 评论(0) 推荐(0) 编辑
摘要: 假定客户端执行主动打开,发送syn包到服务器,服务器执行完该包的第一次握手操作后,调用af_ops->send_synack向客户端发送syn+ack包,该回调实际调用tcp_v4_send_synack函数; 1 int tcp_conn_request(struct request_sock_o 阅读全文
posted @ 2019-10-28 10:27 AlexAlex 阅读(2148) 评论(0) 推荐(0) 编辑
摘要: 假定客户端执行主动打开,服务器执行被动打开,客户端发送syn包到服务器,服务器接收该包,进行建立连接请求的相关处理,即第一次握手;本文主要分析第一次握手中被动打开端的处理流程,主动打开端的处理请查阅本博客内另外的文章; IPv4携带的TCP报文最终会进入到tcp_v4_do_rcv函数,服务器准备接 阅读全文
posted @ 2019-10-28 10:20 AlexAlex 阅读(1528) 评论(0) 推荐(0) 编辑
摘要: 假定客户端执行主动打开,并且已经收到服务器发送的第二次握手包SYN+ACK,在经过一系列处理之后,客户端发送第三次握手包ACK到服务器;其流程比较简单,主要是分配skb,初始化ack包并发送;需要注意的一点是,标记纯ACK包竟然用了skb->truesize=2,好吧; 阅读全文
posted @ 2019-10-28 10:12 AlexAlex 阅读(517) 评论(0) 推荐(1) 编辑
摘要: 假设客户端执行主动打开,已经经过第一次握手,即发送SYN包到服务器,状态变为SYN_SENT,服务器收到该包后,回复SYN+ACK包,客户端收到该包,进行主动打开端的第二次握手部分;流程中涉及到的函数和细节非常多,本篇只对主流程予以分析; 在ESTABLISHED和TIME_WAIT以外的状态时接收 阅读全文
posted @ 2019-10-28 10:12 AlexAlex 阅读(1665) 评论(0) 推荐(0) 编辑
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 30 下一页