我是靠谱客的博主 高贵信封,这篇文章主要介绍2.2.3 Posix API和网络协议栈Posix API一.tcp建立连接——三次握手二、tcp数据传输三、tcp断开连接——四次挥手,现在分享给大家,希望可以做个参考。
文章目录
- Posix API
- 一.tcp建立连接——三次握手
- 1.三次握手,服务器客户端,分别发送哪个函数里面?
- 2.TCP为什么是三次握手?
- 二、tcp数据传输
- 三、tcp断开连接——四次挥手
Posix API
Posix API学习记录(一)
Posix API学习记录(二)
| 服务器 | 客户端 |
|---|---|
| socket() | socket() |
| bind() | bind() |
| listen() | connect() |
| accept() | send() |
| recv() | recv() |
| send() | close() |
| close() |
一.tcp建立连接——三次握手
1.三次握手,服务器客户端,分别发送哪个函数里面?
三次握手,服务器客户端,分别发送哪个函数里面?
server:
->创建socket,默认 CLOSE 态
-> listen后进入 LISTEN 态,进入三次握手第一次
-> 收SYN,发SYN, ACK后,进入SYN RCVD态
->在第三次握手收到ACK后,进入 ESTABLISHED 态(可通信)
client:
->默认CLOSE态
->调用connect函数, 程序主动打开,发SYN,进入 SYN_SENT 态
->收SYN,ACK,发ACK,进入ESTABLISHED 态(可通信)
accept() 的作用?
1.accept队列,取出一个tcb
2.为tcb分配一个socket


2.TCP为什么是三次握手?
TCP为什么是三次握手?
二、tcp数据传输
tcp 先发先到,通过延迟 ack 保证顺序

TCP的粘包和分包:
1.应用层协议头前面加 pktlen
//1.应用层协议投前面 pktlen (简单易实现)
read(tcphdr,2);
read(tcphdr->length);
while(count < tcphdr->lenght){
size = read(tcphdr->length - count);
count += size;
}
2.为每一个包加上分隔符(较复杂)
三、tcp断开连接——四次挥手

1.问题: 如果出现大量close_wait,如何解决
出现原因:大量调用recv() 没有调用close()
解决:异步处理
2.双方同时调用close 会出现closing的状态
3.为什么会有time_wait? -> 避免最后一次ack丢失
最后
以上就是高贵信封最近收集整理的关于2.2.3 Posix API和网络协议栈Posix API一.tcp建立连接——三次握手二、tcp数据传输三、tcp断开连接——四次挥手的全部内容,更多相关2.2.3内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复