【TCP/IP网络编程】:02套接字类型与协议设置
本篇文章主要介绍创建套接字函数相关的3个输入参数的含义,它们最终确定了套接字通信所采用的协议。同时,也简单对比了TCP和UDP传输方式的区别。
什么是协议?协议是对话中使用的通信规则,而在计算机领域则可解释为“计算机间对话的通信规则”。简言之,协议就是为了完成数据交换而约定的规则。
//创建套接字
#include <sys/socket.h> int socket(int domain, int type, int protocol);
-> 成功时返回文件描述符,失败时返回-
domain 套接字中使用的协议族信息
type 套接字数据传输的类型信息
protocol 计算机间通信使用的协议信息
协议族(Protocol Family)
协议族的类型信息分类如下,其中常用的如IPv4协议族信息PF_INET及IPv6协议族信息PF_INET6等
协议族类型
套接字类型
套接字类型指的是套接字通信的数据传输方式,常用的套接字类型有两种,即TCP传输类型SOCKET_STREAM,UDP传输类型SOCKET_DGRAM。书中举例的两幅漫画形象地解释了TCP和UDP数据传输的差异:

TCP传输类型
上面提到了面向连接的套接字的一些特点,其中,比较容易验证的是第三点--传输的数据不存在数据边界,只需要调整通信双方write和read的次数不一致即可。那这一点又是如何做到的呢?-->收发数据的套接字内部有缓冲区,简言之就是字节数组。通过套接字传输的数据会保存到该字节数组中,只要不超出该字节数组的容量,则可待该字节数组填满之后通过一次read操作读取全部内容。
那如果套接字缓冲区已满是否意味着会发生数据丢失?并不会。由于面向连接套接字的安全机制,如果套接字缓冲区满,则传输端将停止传输;并且根据接收端的状态传输数据,如果传输出错还会提供重传服务。
TCP:“可靠、有序、基于字节的面向连接的数据传输方式”

UDP传输类型
面向消息的套接字传输则恰好相反。其中,存在数据边界的特性意味着接受和传输数据的次数必须保持一致。
UDP:“不可靠、无序、基于报文的无连接的数据传输方式”
协议的最终选择
socket函数的第三个参数protocol确定了socket通信的最终协议。通常我们并不需要关注该参数,因为只要前两个参数确定,第三个参数便可唯一确定。此时只需将该参数置0即可,如IPv4协议族+TCP传输类型可确定第三个参数只能为IPPROTO_TCP;而IPv4协议族+UDP传输类型可确定第三个参数只能为IPPROTO_UDP。只有当同一协议族中存在多个数据传输方式相同的协议时,需特殊处理。
【TCP/IP网络编程】:02套接字类型与协议设置的更多相关文章
- TCP/IP网络编程之套接字类型与协议设置
套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式.如果一方使用电话,另一方也必须使用电话,而不是书信.可以说,电话就是两人对话的协议.协议是对话中使用的通信规则,扩展到计算机领域可整理为 ...
- TCP/IP网络编程之套接字的多种可选项
套接字可选项进而I/O缓冲大小 我们进行套接字编程时往往只关注数据通信,而忽略了套接字具有的不同特性.但是,理解这些特性并根据实际需要进行更改也十分重要.之前我们写的程序在创建好套接字后都是未经特别操 ...
- TCP/IP网络编程之套接字与标准I/O
标准I/O函数 标准标准I/O函数有两个优点: 标准I/O函数具有良好的移植性 标准I/O函数可以利用缓冲提高性能 关于移植性无需过多解释,不仅是I/O函数,所有标准函数都具有良好的移植性.因为,为了 ...
- TCP/IP网络编程之多播与广播
多播 多播方式的数据传输是基于UDP完成的,因此,与UDP服务端/客户端的实现非常接近.区别在于,UDP数据传输以单一目标进行,而多播数据同时传递到加入(注册)特定组的大量主机.换言之,采用多播方式时 ...
- 《TCP/IP网络编程》
<TCP/IP网络编程> 基本信息 作者: (韩)尹圣雨 译者: 金国哲 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115358851 上架时间:2014-6- ...
- TCP/IP网络编程系列之二(初级)
套接字类型与协议设置 我们先了解一下创建套接字的那个函数 int socket(int domain,int type,int protocol);成功时返回文件描述符,失败时返回-1.其中,doma ...
- TCP/IP网络编程系列之一(初级)
概述 网络编程实际上就是编写程序使两台联网的计算机相互的交换数据.操作系统会提供名为“ 套接字 ”的部件.套接字是网络数据传输的软件设备,即使对网络数据传输原理不太熟悉也无关紧要.我们也能通过套接字完 ...
- 《TCP/IP网络编程》学习笔记整理
简介 本笔记目前已包含 <TCP/IP网络编程>中的前 5 章,后续章节会在近期内补充完整. 我在整理笔记时所考虑的是:在笔记记完后,当我需要查找某个知识点时,不需要到书中去找,只需查看笔 ...
- 【TCP/IP网络编程】:01理解网络编程和套接字
1.网络编程和套接字 网络编程与C语言中的printf函数和scanf函数以及文件的输入输出类似,本质上也是一种基于I/O的编程方法.之所以这么说,是因为网络编程大多是基于套接字(socket,网络数 ...
随机推荐
- 通过U盘在物理机安装CentOS出现Timeout的问题
错误信息:centos dracut timeout..... 解决方案: 在进入install页面是,按e,启动编辑.要保证Label与U盘的卷标保持一致即可.
- [转载]——Full UNDO Tablespace In 10gR2 and above (文档 ID 413732.1)
最近遇到了这个案例,官方文档已有详尽的分析.介绍,特转载在此,方便以后查看! Full UNDO Tablespace In 10gR2 and above (SQL> select count ...
- go 语言学习图解
- 20191217-关于JPA @Query查询数据一直为空,直接在数据库里执行SQL则可以查出来
20191217-关于JPA @Query查询数据一直为空,直接在数据库里执行SQL则可以查出来 前提:数据库中查询,由于在视图中无主键概念,只是在代码中由逻辑主键.结果:数据中作为逻辑主键中有个字段 ...
- python访问kafka
操作系统 : CentOS7.3.1611_x64 Python 版本 : 3.6.8 kafka 版本 : 2.3.1 本文记录python访问kafka的简单使用,是入门教程,高阶读者请直接忽略. ...
- LinAlgError: Last 2 dimensions of the array must be square
python 矩阵计算时出现错误 此时如果矩阵不是方阵,就会出现如下错误: 这里值得注意的是:当我们这样使用的时候,程序运行又会很正常: 貌似我们求得了非方阵的逆. 下面我们来验证一下: 仔细一看,这 ...
- SpringCloud微服务(01):Eureka组件,管理服务注册与发现
本文源码:GitHub·点这里 || GitEE·点这里 一.Eureka基本架构 1.Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,SpringCl ...
- c++ LeetCode(初级数组篇)十一道算法例题代码详解(一)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10940636.html 唉!最近忙着面试找实习,然后都是面试的很多是leetcode的算法题, ...
- Spring Boot 2.2.2.RELEASE 版本中文参考文档【3.2 - 3.10】
Spring Boot 2.2.2.RELEASE版本中文文档持续更新中~如有需要获取参考文档文件,关注公众号JavaSo,回复“参考文档”即可. 3.2 结构化代码 Spring Boot不需要任何 ...
- golang-方法和接口
1.方法 方法类似函数 ,多了一个接收者 ,接收者是指针指向结构体(也可以是值) ,方法与结构体绑定 (可以理解为模板定义方法) ,方法位于结构体内部 方法集可以理解就是多个方法 可以组合其他结构体方 ...