前言

前文我们介绍了网络协议的各层,同时也介绍了一下我们在编写代码时候的服务端的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();

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

计算机网络再次整理————tcp例子第二前奏[四]的更多相关文章

  1. 计算机网络再次整理————tcp例子前奏[三]

    前言 简单编写一下tcp例子. 正文 我们常说IOS有7层,实际上也只有4层,或者这样说简单的说是4层. 首先是数据链路层,首先这一层解决了什么问题呢?为什么要有这一层呢? 首先要抛开有操作系统的意识 ...

  2. 计算机网络再次整理————tcp例子[五]

    前言 本文介绍一些tcp的例子,然后不断完善一下. 正文 服务端: // See https://aka.ms/new-console-template for more information us ...

  3. 计算机网络再次整理————tcp周边[八]

    前言 tcp的包的格式可以看我以前的计算机网络整理,下面这些周边只是为了开发时候我们能用到一些理论知识. 正文 首先要介绍的就是域名,为啥有域名这东西呢?单纯站在网络的角度上讲这属于应用层的东西了. ...

  4. 计算机网络再次整理————tcp[二]

    前言 本文不会去介绍tcp的具体协议,因为这个tcp 应该不能说是单纯的连接和传输数据这么简单,里面还有很多机制. 正文 首先介绍一下什么是协议族(protocal Family),举个例子PF_IN ...

  5. 计算机网络再次整理————tcp的关闭[七]

    前言 tcp的关闭不是简单粗暴的,相对而言是友好优雅的,好聚好散吧. 那么友好的关闭方式是这样的: 假设这里是客户端请求关闭的,服务端倒过来. 客户端:我要请求关闭 服务端:我接收到你的请求了,等我把 ...

  6. 计算机网络再次整理————UDP例子[六]

    前言 简单的说,UDP 没有 TCP 用的广泛,但是还有很多是基于UDP的程序的,故而简单介绍一下. 正文 秉承节约脑容量的问题,只做简单的介绍和例子,因为自己几乎也没怎么用过UDP. 只是了解和知晓 ...

  7. 计算机网络再次整理————socket[一]

    前言 以前也整理过吧,写了几篇之后,感觉没啥整理的必要了然后就放弃了,最近又想整理一下. 正文 这篇对应的是:https://www.cnblogs.com/aoximin/p/12235333.ht ...

  8. 对TCP三次握手四次分手还不清楚,超简单解析

      关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手 ...

  9. 对TCP三次握手四次分手还不清楚的速度进,超简单解析,明白了就很好记!

    关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手和四 ...

随机推荐

  1. 【LeetCode】797. All Paths From Source to Target 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 回溯法 日期 题目地址:https://leetco ...

  2. 【LeetCode】809. Expressive Words 解题报告(Python)

    [LeetCode]809. Expressive Words 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http ...

  3. 第九届河南理工大学算法程序设计大赛 正式赛L:最优规划(最小生成树)

    单测试点时限: 1.0 秒 内存限制: 512 MB 有很多城市之间已经建立了路径,但是有些城市之间没有路径联通.为了联通所有的城市,现在需要添加一些路径,为了节约,需要满足添加总路径是最短的. 输入 ...

  4. <数据结构>XDOJ261.理解哈夫曼树

    问题与解答 问题描述: 假设用于通信的电文由 n(2≤n≤30)个字符组成,字符在电文中出现的频度(权值)为 w1 w2- wn,根据该权值集合构造哈夫曼树,并计算该树的带权路径长度. 输入说明: 输 ...

  5. 使用所学Spring知识,实现简易的图书查询系统功能。实现查询全部图书。 根据书籍编号查询信息。 根据书名查询书籍信息。 根据状态查询书籍信息。

    相关 知识 >>> 相关 练习 >>> 实现要求: 使用所学Spring知识,实现简易的图书查询系统功能. 要求如下: 查询全部图书. 根据书籍编号查询信息. 根据 ...

  6. Browser Events 常用浏览器事件

    事件 说明 click 鼠标点击时触发此事件 dblclick 鼠标双击时触发此事件 mousedown 按下鼠标时触发此事件 mouseup 鼠标按下后松开鼠标时触发此事件 mouseover 当鼠 ...

  7. UML的定义和组成详细介绍

    目录 1.UML 1.1概述 1.2 UML是一种建模语言 1.3 UML语言包含三方面 2.UML支持软件体系结构建模 2.1 逻辑视图 2.2 实现(开发)视图 2.3 部署视图 2.4 过程视图 ...

  8. Swoole 协程简介

    什么是协程 协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建.销毁和切换的成本都非常低. 协程不能利用多核 cpu,想利用多核 cpu 需要依赖 Swoole 的多进程模型. ...

  9. 初识python: 回调函数

    回调函数 简单理解就是:将一个函数通过参数的形式传递给另一个函数 #!/user/bin env python # author:Simple-Sir # time:2019/8/9 10:49 # ...

  10. Windows Batch 编程 和 Powershell 编程

    Batch Script - Functions with Return Values https://www.tutorialspoint.com/batch_script/batch_script ...