文章目录

  • (1)IP地址和端口号
    • A:源IP地址和目的IP地址
    • B:端口号
  • (2)TCP
  • (3)UDP
  • (4)网络字节序

仔细观察可以发现,主机与主机完成网络通信本质其实进程间通信,例如我们使用QQ相互发送消息以及访问百度服务器查询关键词等等。

对于同一台主机的两个进程,要完成通信,方法有很多种,例如管道,共享内存等。而不同主机的两个继承想要完成通信则必须要通过网络,其中有一个非常关键的问题就是如果把一个主机的数据发送到另一个数据,这就需要IP地址,发送过去之后,一个主机上又有可能运行多个进程,如何准确让QQ这个进程接受呢,这就需要端口号所以说,IP+端口号标识了全网唯一的进程

(1)IP地址和端口号

A:源IP地址和目的IP地址

前文说过:IP地址用于标识公网中某一个台主机

所以它能确保数据准确发送给目的主机

B:端口号

在传输层中也有类似于IP地址和MAC地址的概念,它就是端口号,端口号用来确定应该将数据交付给哪一个应用程序

我们都知道所有进程都需要一个PID来进行表示,但是不是所有的进程都是网络进程,所以不是所有进程都需要端口号。
同时一个进程可以绑定多个端口号(就像学生在学校可以有学号,在健身房可以有会员号),但是一个端口号不能被多个进程绑定

(2)TCP

为了实现数据的可靠传输,需要考虑很多的事情,比如数据是否被破坏,丢包以及分片顺序混乱等问题

所以TCP通过校验和,序列号确认应答,重发控制,连接管理以及窗口控制等机制实现可靠性传输

(3)UDP

UDP和TCP不一样,它不提供复杂的控制机制,它的主要职责就是发送,数据丢包不丢包,接受没有接受和它没有一点关系

(4)网络字节序

我们知道数据才内存中存放时有大端和小端之分

而在网络数据流中,也有大小端之分。TCP/IP协议规定,网络数据流应该采用大端字节序,即低地址高字节

无论一台主机是大端还是小端机,都要按照这个规定来发送数据,如果当前主机是小端就要将小端转为大端,然后从内存的低地址到高地址发送数据,接收方也是按照从低到高的顺序接受


这样做很大的优点就是数据在传输的同时就可以做运算了,如果是小端的话就必须要等待所有数据全部就为了才可以开始操作

所以为了更加方便操作,C中也提供了相应的接口以供主机字节序和网络字节序间的转换

#include <arpa/inet.h>/* 32位整数从主机字节序转换为网络字节序 */
uint32_t htonl(uint32_t hostlong);
/* 16位整数从主机字节序转换为网络字节序 */
uint16_t htons(uint16_t hostshort);
/* 32位整数从网络字节序转换为主机字节序 */
uint32_t ntohl(uint32_t netlong);
/* 16位整数从网络字节序转换为主机字节序 */
uint16_t ntohs(uint16_t netshort);
  • 其中h表示hostn表示networkl表示32位长整数,s表示16位短整数
  • 如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回;如果是大端字节序则不作修改,直接返回

2-1:套接字(Socket)编程之必备知识相关推荐

  1. Java套接字Socket编程--TCP参数

    在Java的Socket中,主要包含了以下可设置的TCP参数. 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长 ...

  2. 套接字Socket编程

    Socket,原意插座.插口.写软件程序时,可以想象成一根网线,一头插在客户端,一头插在服务端,然后进行通信.所以通信前,双方都要建立一个Socket. Socket编程进行的是端到端的通信,意识不到 ...

  3. [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

    很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识   ...

  4. 网络编程:套接字socket函数与绑定信息bind函数

    套接字socket函数与绑定信息bind函数 套接字 绑定信息(绑定IP和端口) socket函数 bind函数 struct sockaddr结构体的组成: struct sockaddr_in结构 ...

  5. Java网络编程入门,包含网络相关概念、InetAddress类、套接字Socket、网络上传和下载文件等

    Java学习-11-韩顺平老师 Java-网络编程入门 目录: 01-网络相关概念 02-InetAddress类 03-套接字Socket 04-网络上传和下载文件 05-UDP网络编程 网络编程相 ...

  6. java实现套接字网络编程_Java网络编程(一)Socket套接字

    一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...

  7. 网络编程(网络基础、套接字Socket、数据报Datagram及其常用方法)

    章节内容 套接字Socket 数据报Datagram 章节目标 了解网络通信中的IP,端口和协议 掌握套接字的使用 熟悉数据报的使用 一.网络基础 1.软件结构 C/S结构 C => Clien ...

  8. 安卓学习笔记40:基于套接字网络编程

    文章目录 零.学习目标 一.Socket概述 (一)两种传输模式 (二)基于Socket网络编程 三.案例演示 - C/S架构聊天室 (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建聊天服务 ...

  9. 套接字socket 的地址族和类型、工作原理、创建过程

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  10. 网上最全的套接字socket

    套接字socket使用 1.1创建socket sk = socket(int family, int type, int protocol); family:协议簇,PF_INET.PF_INET6 ...

最新文章

  1. AWS S3宕机的启发: 云必须分散化
  2. php {template header},php通过header发送自定义数据
  3. 分页浏览的导航栏Bootstrap和js两种方法
  4. 用C++对C++语法格式进行分析
  5. swift3.0 post Json解析
  6. Lingo优化模型概述
  7. JavaScript知识概要
  8. ZooKeeper系列(四)
  9. MySQL(26)--- 索引
  10. vue 转换信息为二进制 并实现下载
  11. web报表工具FineReport常用函数的用法总结(报表函数)
  12. from scapy.all import * 调试失败_记一次错:Vue-构建项目后使用 npm link 失败
  13. src2pkg:slackware下超强打包程式 [转]
  14. Ognl表达式的一些用法
  15. 由于您的系统没有安装html help,win10遇到“您未安装FLASH控件”的提示怎么办
  16. 傅里叶变换对照表_实验室仪器中英文及缩写对照表
  17. 处nm是什么意思_CPU的nm是什么意思
  18. pd对焦速度_硬知识|都红圈了,为何对焦速度还很慢?你的镜头呢?
  19. 要是你还看不懂这篇冒泡排序,麻烦找我要红包
  20. TLS 系统默认版本.NET Framework 3.5.1 Windows 7 SP1 和 Server 2008 R2 SP1 中包含的支持

热门文章

  1. 经典面试题(33):以下代码将输出的结果是什么?
  2. python 姓名用*替换_学会用python截取你的姓名
  3. 嵌入式开发板02---点亮LED升级版
  4. Apriori关联规则算法实现及其原理(基础篇)
  5. 120分的转录组试题,你能得多少
  6. 达芬奇2022最新更新 达芬奇17.4.5 build 7正式版(M1支持)
  7. FCPX插件mTransition Shade for mac(71组阴影遮挡过渡视频转场)
  8. matlab求感知距离的命令,感知机算法(MATLAB)
  9. 红黑树分为红和黑有什么好处_30 张图带你彻底理解红黑树
  10. P3146 [USACO16OPEN]248 G(python3实现)