unp----函数connect结合tcp三路握手原理分析
来源:互联网 发布:男士手表知乎 编辑:程序博客网 时间:2024/05/23 16:22
建立一个tcp连接的情景:
(1)服务器在接受外来的链接的时候。调用socket,bind, listen这三个函数来完成,我们称之为被动打开(passive open)
(2)当我们调用connect发起主动打开(active open)。这样tcp客服端将会发送一个SYN(同步)分节给服务器。该SYN分节不携带任何数据。
(3)当服务器接收到了来自客服端的SYN分节,就发送ACK给tcp客服端,同时服务器也要发送一个SYN分节给tcp客服端。
(4)当tcp客服端确定收到服务器的 SYN分节。
就这样完成了tcp三握手
tcp客服通过connect函数来完成与服务器之间的连接:
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t len)
成功则返回0,出错则返回为-1
当出错的时候其错误原因全部存到了errno里面
1.若tcp客服收到了来自服务器的响应是RST(复位),则errno = ECONNREFUSED,这是一种硬错误(hard error)。出现的原因:很有可能是服务器主机已经连接到了局域网范围内,并且获得了其IP地址,但是指定的端口上没有进程与之连接(即没有运行服务器进程)
RST是tcp发生错误的时候发送的一种tcp分节:
产生RST的三个条件:
(1):目的端口SYN分节已经到达,该端口在服务器上面没有被监听(如1中原因)
(2):tcp客户取消了一个已有连接
(3):TCP接受到了一个不存在的连接上的分节
2.客服发出的SYN分节没有到达tcp服务器,在路由上面引发了一个ICMP错误,则errno = EHOSTUNREACH 或者errno = ENETUNREACH(通常情况下两种错误作为一种情况对待,因为ENETUNREACH被认为已经超时)
以下两种情况会出现上诉原因:
(1)按照本地的系统表没有找到到达远程系统的路径
(2)connect不等待就返回
3.TCP客户端没有收到来来自TCP服务的SYN分节,则 errno = ETIMEDOUT。出现的原因描述:如果在本地的子网中,存在192.168.1.100的ip,但是没有主机连接上来。
参考资料:unix网络编程,4.3connect函数。
- unp----函数connect结合tcp三路握手原理分析
- 结合wireshark分析TCP和三次握手原理
- UNP函数笔记三: TCP客户/服务器程序示例
- tcp 三路握手过程
- TCP的三路握手和四路挥手及其临界条件(结合系统调用)
- tcp三次握手原理
- TCP三次握手原理
- TCP连接的三路握手
- linux tcp三路握手详解
- socket通讯原理以及tcp、ip三次握手机制分析
- socket通讯原理以及tcp、ip三次握手机制分析
- socket通讯原理以及tcp、ip三次握手机制分析
- socket通讯原理以及tcp、ip三次握手机制分析
- socket通讯原理以及tcp、ip三次握手机制分析
- TCP三次握手和四次挥手原理分析
- TCP 握手/挥手分析
- TCP 三次握手分析
- TCP三次握手分析
- Kotlin基础教程-等式
- 揭秘Kaggle神器xgboost
- Ubuntu 16.04 下 MATLAB 2016 b的安装
- HDU2819Swap(二分图最大匹配)
- 每次连接阿里云服务器浪费半小时,我就不信了。
- unp----函数connect结合tcp三路握手原理分析
- 第1章 安装
- JavaScript嵌入到html的方式
- DNA Consensus String
- LeetCode之路:242. Valid Anagram
- 带你全方位使用Anko库-下篇
- 开发时数据库连接失败的解决办法
- JSP数据交互(一)
- html+css快速入门教程