ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算机网络再次整理————tcp例子第二前奏[四]

2022-02-04 21:00:09  阅读:113  来源: 互联网

标签:socket 前奏 System tcp 计算机网络 连接 服务端 客户端


前言

前文我们介绍了网络协议的各层,同时也介绍了一下我们在编写代码时候的服务端的accept、bind、listen、connect、send做了什么。

可以说是从宏观的角度,或者代码开发的角度来说的,在此我觉得还不够具体。

同样我想解释一下为什么我说服务端listen之后,客户端已经可以进行tcp连接了,同样可以发送消息了。

正文

首先我们的tcp连接网图:

前提,这个时候服务端只是listen了,并没有accept。且客户端调用了connect,同时send 了hello word了。

第一个包:

客户端发起tcp连接。

上面可以看到seq 为0,同样有0x002 SYN 标志。

第二个包:

这是服务器端给客户端的.

说明此时服务端是认可了客户端的请求的,并且呢,开始进行了确认操作。

第三个包:

这是客户端发出的,3次握手已经完成了,说明已经连接上了。

然后就是要确认之后listen 之后是否可以发送消息。

第四个包:

客户端已经向服务端发起了消息。

可以看到数据是:68656c6c6f2073657276696365

大家可以用utf8 16进制进行解码看下解密出来的是啥。

第五个包:

服务端的确认包。说明服务端确认收到了数据的。

其实这些连接和收包前文提及了,其实都是操作系统帮助我们做了。

那么为什么有些书本要写,accept 之后才是连接呢?

这是因为相当我们的应用程序而言的,accept之后,我们才能知道客户端连接过来的在服务端创建的socket是多少。

这个时候服务端才知道有客户端进行了连接了,所以认为这个时候才连接成功了。而一些书本认为服务端也不包含操作系统,仅是我们的应用程序。

这里我用的是wireshark 进行抓包的。

本来想把四次挥手也截屏出来的,但是后面向介绍一些更具体的东西,所以往后推一推吧,这样也不会冗余,同时大家交流起来更加的自然。

实验代码如下:
服务端:

using System.Net;
using System.Net.Sockets;

var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var ipAddress = IPAddress.Parse("127.0.0.1");
EndPoint endPoint = new IPEndPoint(ipAddress, 8888);
socket.Bind(endPoint);
socket.Listen();
Console.ReadLine();

客户端:

using System.Net;
using System.Net.Sockets;

var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var ipAddress = IPAddress.Parse("127.0.0.1");
EndPoint endPoint = new IPEndPoint(ipAddress, 8888);
socket.Connect(endPoint);
socket.Send(System.Text.Encoding.UTF8.GetBytes("hello service"));
Console.WriteLine("发送成功");
Console.ReadLine();

以上只是个人的整理,如有错误,望请指点。

标签:socket,前奏,System,tcp,计算机网络,连接,服务端,客户端
来源: https://www.cnblogs.com/aoximin/p/15861993.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有