我是靠谱客的博主 高贵信封,最近开发中收集的这篇文章主要介绍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 Posix API和网络协议栈Posix API一.tcp建立连接——三次握手二、tcp数据传输三、tcp断开连接——四次挥手所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复