随笔分类 - 网络编程
网络编程的实践与总结
摘要:前言 tcp的包的格式可以看我以前的计算机网络整理,下面这些周边只是为了开发时候我们能用到一些理论知识。 正文 首先要介绍的就是域名,为啥有域名这东西呢?单纯站在网络的角度上讲这属于应用层的东西了。 如果站在万物互联的角度上讲,把互联网看做是一台大型电脑的话,那么域名就相当于句柄了。 句柄这东西解释
阅读全文
摘要:前言 tcp的关闭不是简单粗暴的,相对而言是友好优雅的,好聚好散吧。 那么友好的关闭方式是这样的: 假设这里是客户端请求关闭的,服务端倒过来。 客户端:我要请求关闭 服务端:我接收到你的请求了,等我把要发的数据发完。 服务端:我要发的数据发完了,可以关闭了。 客户端:好的,我已经执行清理工作了,关闭
阅读全文
摘要:前言 简单的说,UDP 没有 TCP 用的广泛,但是还有很多是基于UDP的程序的,故而简单介绍一下。 正文 秉承节约脑容量的问题,只做简单的介绍和例子,因为自己几乎也没怎么用过UDP。 只是了解和知晓其中的用途,那么设计方案的时候有特定的场景,那么可以参考。 UDP 和 TCP 最大的不同的地方是传
阅读全文
摘要:前言 本文介绍一些tcp的例子,然后不断完善一下。 正文 服务端: // See https://aka.ms/new-console-template for more information using System.Net; using System.Net.Sockets; var sock
阅读全文
摘要:前言 前文我们介绍了网络协议的各层,同时也介绍了一下我们在编写代码时候的服务端的accept、bind、listen、connect、send做了什么。 可以说是从宏观的角度,或者代码开发的角度来说的,在此我觉得还不够具体。 同样我想解释一下为什么我说服务端listen之后,客户端已经可以进行tcp
阅读全文
摘要:前言 简单编写一下tcp例子。 正文 我们常说IOS有7层,实际上也只有4层,或者这样说简单的说是4层。 首先是数据链路层,首先这一层解决了什么问题呢?为什么要有这一层呢? 首先要抛开有操作系统的意识,因为它为我们做了太多东西了,摆在你面前的只有两个终端和一根网线。 数据链路层定义了在单个链路上如何
阅读全文
摘要:前言 本文不会去介绍tcp的具体协议,因为这个tcp 应该不能说是单纯的连接和传输数据这么简单,里面还有很多机制。 正文 首先介绍一下什么是协议族(protocal Family),举个例子PF_INET 为ipv4 协议族了。 为什么有一个族的概念呢?因为吧,ipv4 有很多协议,地址解析协议AR
阅读全文
摘要:前言 以前也整理过吧,写了几篇之后,感觉没啥整理的必要了然后就放弃了,最近又想整理一下。 正文 这篇对应的是:https://www.cnblogs.com/aoximin/p/12235333.html,可以说是这篇的重写吧。 首先介绍一下什么是socket的,如果搞学术的不知道,他们可能要求的比
阅读全文
摘要:前言 准备整理网络章节,先整理概念。 tracer 是一个可以获取我们的主机到访问端中间经过了哪些路由,这个对于我们非常重要,看下原理吧。 正文 tracer 在unix中是tracerRout。 它的原理是这样子的,他发送一个udp包,去访问一个不可达端口,这个端口是一个高位端口,比如说44444
阅读全文
摘要:前言 准备整理网络这块,先把概念整理。 ip记录路由选项,这个是做什么的呢? 比如说我们发的一条信息,从一端到另外一端经过了那些路由呢?这是一个问题啊。 这个ip记录路由选项就是来看这个问题的,当然这个现在已经不是好的方案,做为了解即可。 正文 老规矩看下选项结构: code位 是看下什么选项。 l
阅读全文
摘要:前言 因为要整理网络这一块,所以打算先把概念写下。这节介绍ping的实现原理。 正文 先看一下图: 又没有发现和我们的icmp很像?对头。在icmp中,我写道:icmp有两种报文,一种是差错报文,一种是查询报文。 看看ping不ping的通,使用的就是icmp的查询报文。 前面的类型和代码还有校验和
阅读全文
摘要:前言 打算从新整理网络这一块,那么我先把概念整理下来。 正文 ICMP是ip的一个组成。他传递差错报文以及其他需要注意的信息。主要用于反馈一些网络传输的问题。因为ip协议很容易丢包,那么icmp可以告诉我们的进程到底为什么丢。 然后再细看一下icmp内部: 8位类型表示什么类型的icmp。 然后代码
阅读全文
摘要:前言 介绍我们常说的计算机传输速率,带宽,吞吐量。 正文 简单介绍一下我们日常中的传输速率,看图: 我们在日常生活中,常常说100m带宽,但是我们下载文件差不多就是12m每秒。那么是不是卖假货? 其实是这样子的100带宽值得是比特率,是100Mb每秒。而显示的是12m是存储单位,是MB。 一个是字节
阅读全文
摘要:前言 这里基于arp的基础概念,请先看前面那一节。 正文 看图: 和前面一样去解析地址。 以太网目的地址:就是mac地址。 在发送arp包的时候呢,这个mac地址就是全部是1,因为不知道对方地址是啥。 以太网源地址,就是自己mac地址。 帧类型,这个是什么呢?这代表一种子类型,0860是arp协议。
阅读全文
摘要:前言 续前面一章。 正文 看下ip选项: 看一张图: 这个ip选项一般我们不用看,即使你去搞硬件,那么做c++或者c的人会告诉你填啥,按照他们设置即可。 那么ip是如何传输的呢? 先看这张图,这张图的意思是什么呢? 有两台机器,他们要通信,而且在同一网关内,13.33-》13.35。 他们通信是这样
阅读全文
摘要:前言 两节结束,为网络底层系列做铺垫。 首先来看一张图: IOS有七层,但是我们可以简化层4层,ip属于传输层,可以说是非常重要,下面简单的做一个介绍。 正文 ip的介绍: 1.ip是tcp/ip 协议族中最为核心的协议。所以的TCP、UDP、ICMP及ICMP数据都用ip数据报传输。 2.ip提供
阅读全文
摘要:前言 打算整理网络这一块,先把概念写完。 就是有一个问题,那就是为什么有ip地址还有mac地址呢? 原因是这样子的,我们知道ip协议是第三层,那么有一个问题了,如果只有第三层的ip是否能过识别到主机? 答案是不能的啊,第一层和第二层 分别是物理层、数据链路层,这两层的实现协议叫做以太网,以太网依靠m
阅读全文
摘要:前言 ip 我们知道有ip4与ip6。ip6还未实行,那么就暂且不谈。 ip4我们在传递的时候一般是这样的"127.0.0.1",但是我们传输的是信号,也就是二进制数据,这个字符如何转换成2进制的? 把"127.0.0.1" 转换成一个什么形式的二进制? 主要的是一个约定,规定ip占用4个字节。 1
阅读全文
摘要:前言 关于一些网络编程的常识整理。 正文 1.网络数据传输到我们的计算机,是如何知道传输给那个应用? 通过端口,所以端口也是不能重复占用的。 2. 下面是sockaddr_in 的定义: 1.sin_family 设置的为地址族 2.sin_port 为端口号,16位也就是两个字节,所以端口范围是1
阅读全文
摘要:前言 在网络传输中有两种特别出名,一种是tcp,一种是udp。 他们都是基于套接字,tcp 属于sock_stream 类型,udp 属于sock_dgram。 sock_steam: 1. 传输过程不会有数据丢失。 2. 按序传输数据。 3. 传输的数据不存在数据边界。 sock_dgram 1.
阅读全文
浙公网安备 33010602011771号