easy connect无法连接到服务端_Tcp连接

TCP连接的建立与终止

1.服务端必须准备好接受外来链接。这通常调用socket,bind,和listen这三个函数完成,这称之为被动打开

2.客户端通过connect发起主动打开,这导致客户端TCP发送一个SYN,它告诉服务器端将在建立链接中发送数据的初始序列号

3.服务器端必须确认(ACK)客户的SYN,同时自己也得发送一个SYN,含有服务端在同一链接发送数据的初始序列号

4.客户端再确认服务端的SYN。

ACK中的确认号是发送ACK的一端所期待的下一个序列号。

bcdcfa5251afdfa37292bb15061331e8.png

1.某个应用进程首先调用close,我们称之为主动关闭。该端的TCP发送一个FIN分节,表示数据发送完毕

2.接受到这个FIN的对端执行被动关闭。这个FIN由TCP确认。他的接受也作为一个文件结束符传递给接收端应用程序

3.一段时间后,接受这个FIN的应用进程,也调用close关闭它的套接字,这导致此应用进程也发送一个FIN

4.接受这个最终FIN的原发送端TCP确认这个FIN

TIME_WAIT状态

该状态存在的两个理由

1.可靠的实现TCP全双工连接的终止(处理最终ACK丢失的情形)

2.允许老的重复分节的FIN在网络上消失

9ca7b83d732e65091b43e4bcc0499911.png

TCP端口号与并发服务器

众所周知的端口号0~1023,由IANA分配和控制,普通应用程序不得随意使用。

服务器程序打开一个监听端口,执行被动打开

我们使用{:21,*:*}指出服务器的套接字对,服务器在任意本地接口的端口21上等待连接请求。外地IP地址和外地端口都没有指定,我们使用“*:*”来表示。我们称之为监听套接字。

757f549b220452ccf0ab7958a122b85b.png

TCP无法仅仅通过目标端口号来分离外来的分节到不同的端点,它必须查看套接字的所有4个元素才能确定由哪个端口接受某个到达的分节。

ed72ee1fea6310c971d06b050dbdef09.png

每一个TCP套接字都有一个发送缓冲区,当某个应用程序调用write时,内核将应用程序的缓冲区中复制所写套接字的发送缓冲区。如果该发送缓冲区容纳不下应用程序的所有数据,内核将休眠进程,等待有充足的空间再唤醒进程继续执行写操作。

d87c797d7ec4404c74421ef0e7a39ffa.png

UDP的发送是没有缓冲区的,应为UDP是不可靠的传输,内核不必分配空间保存UDP的发送数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值