我是靠谱客的博主 高贵信封,最近开发中收集的这篇文章主要介绍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断开连接——四次挥手所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部