摘要:
我们可以看到,TCP 的三次握手完全是在内核中实现的,对上层应用来讲完全是透明的。上层应用只负责收发数据,并不知道底层发生了什么哦。 这样三次握手完了,可以看到三次握手,也就是建立连接时,双方交换三个报文。为什么是三次,这主要是为了防止已失效的连接请求报文段又传送到服务器端 而产生差错。 在正常情况 阅读全文
摘要:
当服务器端接收到该报文后,处理流程和上边一样,会唤醒阻塞在该sock 上的接口,通知进程可以对该文件进行读写。 下面服务器端会调用 accept 函数,该函数的主要作用是从已经实现过三次握手的sock 中取出一个sock,来进行通信。 至此双方的 sock 都处于 TCP_ESTABLISHED 状 阅读全文
摘要:
当发现 tcp 头部的 ACK 为 1 ,则进入下面函数处理 ,重点看一下:tcp_finish_connect sock状态改变时调用,比如从TCP_SYN_SENT或TCP_SYN_RECV变为TCP_ESTABLISHED, sock状态改变时调用,比如从TCP_SYN_SENT或TCP_SY 阅读全文
摘要:
上一步分析到,服务器端将客户端发送的sk_buff,里面sock->sk_state 修改为 TCP_SYN_RECV,然后将该数据包发送给客户端。 接下来,我们进一步分析,客户端接收到来自服务器端的tcp报文后,会发生什么。 客户端处理该报文的顺序和服务器端处理该报文的顺序是一致的,为什么,因为他 阅读全文