前言

本文不会去介绍tcp的具体协议,因为这个tcp 应该不能说是单纯的连接和传输数据这么简单,里面还有很多机制。

正文

首先介绍一下什么是协议族(protocal Family),举个例子PF_INET 为ipv4 协议族了。

为什么有一个族的概念呢?因为吧,ipv4 有很多协议,地址解析协议ARP(Address Resolution Protocol)、逆地址解析协议RARP(Reverse Address Resolution Protocol)、互联网控制报文协议ICMP(Internet Control Message Protocol)、传输控制协议TCP(Transmission Contronl Protocol)和用户数据报协议UDP(User Datagram Protocol)。

所以要理解ip 协议还不是这么简单的,然后还有一个叫做地址族的。

地址族和协议族其实是一样的,值也一样,都是用来识别不同协议的,为什么要搞两套东西呢?这是因为之前UNIX有两种风格系统:BSD系统和POSIX系统,对于BSD系统,一直用的是AF,对于POSIX系统,一直用的是PF。Linux作为后起之秀,为了兼容,所以两种都支持,这样两种风格的UNIX下的软件就可以在Linux上运行了。

然后有了ipv4协议族,那么还有一个是数据传输方式,叫做socketType。

理论上我们已经知道了是ipv4的协议族了,那么为什么有一个socketType呢?

为什么有这样一个东西呢? ipv4 协议族我们知道了,有这么多协议。

但是吧,这里并没有指明,用什么传输协议。

比如说面向连接的套接字(socket_stream):

有以下特点:

  1. 传输过程中数据不会消失
  2. 按序传输数据
  3. 传输的数据不存在边界

传输的数据不存在边界,这个怎么说呢?

就是说我可以把一个G的数据,我分为很多包来传输,虽然每次传输的都比较小,但是只要保证数据连接正常,我还是可以传输完成的。

按序传输的,比如我要传输一篇文章,被分成了10个包,这些包是按照顺序传输的,也就是第一个包没有收到,第二个包就不会传输。

传输过程数据不会消失,主要是讲究的其的可靠性。

比如说包没收到会重发,包如果收到重复了会丢弃。

一般两边都有缓存, 如果接收方无法缓存了,也会有相应的对策,让服务方能够重发收到。总之就是有一些措施能够让其数据稳定收到。

另外还有一种比较出名的socketType是Sock_DGRAM。

传输特点:

  1. 强调快速传输而非传输顺序
  2. 传输的数据可能丢失可能损毁
  3. 传输的数据有数据边界
  4. 限制每次传输的数据大小

首先说一下数据边界,前面我们提及到Sock_Steam 说没有数据边界。

这个我们说过,就是说其实就是每次传输的都很小,但是组装理论上可以无限大。

而这个Sock_DGRAM 每次传输就是这么大,也就是数据只能这么多。

Sock_DGRAM 也不会说等上一个传输完成,下一个才开始传输,其是无序的。

除了socketType,那么还有一个叫做ProtocolType的。

这是怎么回事呢?我们指定了协议族,指点了传输类型,为什么要指定ProtocolType呢?

这是因为同一协议族中,可能存在多个传输类型相同的协议。

不过再ipv4 中传输方式是Sock_Steam也就只要tcp了。

而Sock_DGRAM 也就只有UDP了。

这些大概就是设定一个socket的值了。

接下来说一下ip,ip 地址有下面几类:

A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。

首位0开头的

B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。

首位10开头的

C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。

首位110开头的

D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1] 。

E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。

再说数据传输过程中,因为cpu的保存内存有大端序和小端序,这个可以自行去百度,那么网络传输中规定传输的都是大端序,这个需要注意。

实际上,这个大端序和小端序的问题不用考虑我们发送的消息,一般send会做自动转换。

但是只有bind的时候和connect的时候需要注意,因为这个是写入到操作系统中,不会做转换,就需要注意一下。

上面这个不绝对哈,看语言的,有些会帮忙转的。

下一结编写一个完整的tcp服务端和客户端,后面就是一直根据编写的代码,介绍会有什么问题,然后做改造。

计算机网络再次整理————tcp[二]的更多相关文章

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

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

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

    前言 前文我们介绍了网络协议的各层,同时也介绍了一下我们在编写代码时候的服务端的accept.bind.listen.connect.send做了什么. 可以说是从宏观的角度,或者代码开发的角度来说的 ...

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

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

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

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

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

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

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

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

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

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

  8. 计算机网络基础之TCP/IP 协议栈

    计算机网络基础之TCP/IP 协议栈 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.TCP/IP 协议栈概述 1>.什么是TCP/IP协议栈 Transmission C ...

  9. Touch事件or手机卫士面试题整理回答(二)

    Touch事件or手机卫士面试题整理回答(二) 自定义控件 1. Touch事件的传递机制 顶级View->父View->子View,不处理逆向返回 OnInterceptTouchEve ...

随机推荐

  1. 【Web前端】css属性cursor注意事项

    注意使用cursor的url时url的括号后面必须+   ,auto: 错误示范:cursor:url('../picture/head.cur'); 正确示范:cursor: url(". ...

  2. <数据结构>XDOJ332.二叉排序树的判定

    问题与解答 问题描述 给定一个二叉树,判断其是否是一个有效的二叉排序树. 假设一个二叉排序树具有如下特征: 结点的左子树只包含小于当前结点的树. 结点的右子树只包含大于当前结点的树. 所有左子树和右子 ...

  3. k8s env、configmap、secret外部数据加载配置

    K8s提供了多种外部数据注入容器的方式,今天我们主要学习环境变量.ConfigMap以及Secret的使用和配置. 环境变量 在docker项目中,对一个容器添加环境变量可以在容器创建时通过-e EN ...

  4. nginx 超时时间配置说明

    做excel文件导入时 报 504 错误 是nginx网关超时导致 下面几个参数貌似没效果,反正我配置不起作用 这是有问题的配置属性 ,注意   于是我换了配置 ,放在http块里 ,配置生效了 #读 ...

  5. spring security 关于 http.sessionManagement().maximumSessions(1);的探究

    1.前言 spring security 支持对session的管理 , http.sessionManagement().maximumSessions(1);的意思的开启session管理,ses ...

  6. GDB基础知识

    GDB 基础知识 GDB 基础知识 一.简介 支持命令补全功能 GDB 的调用与退出 二.GDB 的基本指令 1. run/r 2. break/b 3. info breakpoints 4. de ...

  7. JAVA-JDK1.7-ConCurrentHashMap-测试和验证

    概述 上次记录了关于ConCurrentHashMap的原理以及源码,现在我对其进行有关功能的测试,下面就讲解一下我测试的内容和代码.这些测试主要针对JDK1.7版本. GET安全测试 上一篇写过ge ...

  8. Java 将PDF转为PDF/A

    通过将PDF格式转换为PDF/A格式,可保护文档布局.格式.字体.大小等不受更改,从而实现文档安全保护的目的,同时又能保证文档可读.可访问.本篇文章,将通过Java后端程序代码展示如何将PDF转为符合 ...

  9. Android官方文档翻译 八 2.1Setting Up the Action Bar

    Setting Up the Action Bar 建立Action Bar This lesson teaches you to 这节课教给你 Support Android 3.0 and Abo ...

  10. Solon 开发,八、注入依赖与初始化

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...