博客
关于我
从零构建通讯器--5.2三次握手,telnet,wireshark
阅读量:273 次
发布时间:2019-03-01

本文共 2750 字,大约阅读时间需要 9 分钟。

TCP连接的三次握手

TCP(传输控制协议)是一种可靠、面向连接的协议。与UDP不同,TCP连接必须经过三次握手建立连接,这一过程不仅确保了数据传输的可靠性,也防止了潜在的攻击行为。

TCP三次握手的过程

TCP连接的建立分为三个步骤:

  • 客户端发起SYN包

    客户端发送一个带有SYN标志位的数据包给服务器。SYN标志位表示这是一个连接请求,服务器需要确认这一请求。

  • 服务器响应SYN-ACK包

    服务器接收到SYN包后,会返回一个SYN-ACK包。SYN表示服务器已经准备好接收连接,ACK表示确认客户端的请求。

  • 客户端发送ACK包

    客户端接收到SYN-ACK包后,再次发送一个ACK包,确认连接请求已经成功建立。

  • 通过这三个步骤,客户端和服务器之间建立了一个可靠的连接,数据传输可以随时进行。

    为什么TCP需要三次握手?

    三次握手的主要目的是为了防止网络诈骗。没有三次握手的协议可能会被恶意用户伪造数据包,冒充连接请求,从而窃取敏感信息。通过三次握手,TCP协议确保了连接的唯一性和安全性。


    Telnet工具的使用介绍

    Telnet是一种命令行工具,用于通过文本界面与服务器通信。它广泛应用于测试网络服务的可用性和通信稳定性。以下是使用Telnet的基本步骤:

  • 打开终端或命令提示符

    在操作系统的终端或命令提示符中输入telnet命令。

  • 指定目标服务器

    输入服务器的IP地址和目标端口号,例如:

    telnet 192.168.1.1 8080

    这里,192.168.1.1是目标服务器的IP地址,8080是目标端口。

  • 连接服务器

    Telnet会尝试连接到指定的服务器。如果连接成功,会提示你输入命令。

  • 发送命令并接收响应

    在连接建立后,你可以输入命令(如help查看帮助信息)或直接输入数据,Telnet会将数据发送到服务器并显示响应。

  • Telnet工具简单实用,是测试网络通信的重要工具。


    Wireshark数据包监控

    Wireshark是一款强大的网络协议分析工具,可以用来捕获和分析数据包流量。以下是使用Wireshark的基本步骤:

  • 安装Wireshark

    先确保你的操作系统上已经安装了Wireshark。如果没有,可以从官方网站下载并安装。

  • 配置抓包接口

    在Wireshark中选择要捕获数据包的接口,通常是以太网接口。

  • 设置过滤条件

    在“捕获”选项卡中,设置过滤条件,例如指定特定IP地址或端口号,确保只捕获感兴趣的数据包。

  • 开始捕获

    点击“开始捕获”按钮,Wireshark会开始监听网络流量并记录数据包。

  • 查看和分析数据包

    捕获完成后,查看捕获到的数据包,使用Wireshark的分析功能(如颜色编码、过滤和统计)来了解网络通信的详细情况。


  • TCP断开的四次挥手

    TCP连接的断开也是通过四次握手完成的。以下是每个步骤的详细说明:

  • 客户端发起FIN包

    客户端发送一个带有FIN标志位的数据包给服务器,表示希望断开连接。

  • 服务器响应ACK包

    服务器接收到FIN包后,返回一个ACK包,确认收到断开请求。

  • 服务器发起FIN包

    服务器发送一个带有FIN标志位的数据包给客户端,表示它也希望断开连接。

  • 客户端响应ACK包

    客户端接收到服务器的FIN包后,再次发送一个ACK包,确认连接已正式断开。

  • 通过四次握手,TCP协议确保了连接的干净断开,防止数据传输中的混乱。


    简单的TCP服务器示例

    以下是一个简单的TCP服务器代码示例,用于演示连接建立和数据传输的基本原理:

    #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #define SERV_PORT 9000int main(int argc, char *const *argv) { // 创建服务器套接字 int listenfd = socket(AF_INET, SOCK_STREAM, 0); // 设置服务器地址和端口 struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(SERV_PORT); serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 绑定地址 bind(listenfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); // 开始监听 listen(listenfd, 32); // 等待客户端连接 while (1) { // 接收客户端连接请求 struct sockaddr_in cli_addr; int opt = SO_REUSEADDR | SO_REUSEPORT; if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) { perror("setsockopt"); exit(EXIT_FAILURE); } int newfd = accept(listenfd, (struct sockaddr *)&cli_addr, sizeof(cli_addr)); if (newfd == -1) { perror("accept"); exit(EXIT_FAILURE); } // 与客户端进行通信 while (1) { char buffer[1024] = {0}; read(newfd, buffer, sizeof(buffer)); printf("客户端发送:%s\n", buffer); char *pcontent = "我是服务器回复"; write(newfd, pcontent, strlen(pcontent)); } close(newfd); } close(listenfd); return 0;}

    总结

    通过以上内容,我们了解了TCP连接的三次握手过程、Telnet工具的使用方法以及Wireshark数据包监控的操作步骤。TCP协议的三次握手机制不仅确保了连接的可靠性,还防止了网络诈骗。希望这些内容能帮助你更好地理解网络通信的基础知识。

    转载地址:http://ptno.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现mergesort归并排序算法(附完整源码)
    查看>>
    Objective-C实现miller rabin米勒-拉宾素性检验算法(附完整源码)
    查看>>
    Objective-C实现Miller-Rabin素性测试程序(附完整源码)
    查看>>
    Objective-C实现Miller-Rabin素性测试程序(附完整源码)
    查看>>
    Objective-C实现MinhashLSH算法(附完整源码)
    查看>>
    Objective-C实现MinHeap最小堆算法(附完整源码)
    查看>>
    Objective-C实现multilayer perceptron classifier多层感知器分类器算法(附完整源码)
    查看>>
    Objective-C实现n body simulationn体模拟算法(附完整源码)
    查看>>
    Objective-C实现naive string search字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现natural sort自然排序算法(附完整源码)
    查看>>
    Objective-C实现nested brackets嵌套括号算法(附完整源码)
    查看>>
    Objective-C实现nevilles method多项式插值算法(附完整源码)
    查看>>
    Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
    查看>>
    Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现not gate非门算法(附完整源码)
    查看>>
    Objective-C实现number of digits解字符数算法(附完整源码)
    查看>>
    Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
    查看>>
    Objective-C实现n皇后问题算法(附完整源码)
    查看>>