【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,网络数 ...
随机推荐
- python 基础学习笔记(7)--迭送器
**函数名的运用** - [ ] 函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量 **函数名的内存地址** ``` def func(): print('666') p ...
- [洛谷P1373][题解]小a和uim之大逃离
(别点我我不是题目) 这道题可以很容易看出是一道dp(因为是在dp关卡里找的) 稍微想一下就可以yy出一个不错的状态: f[i][j][k][0/1]代表走到了点(i,j).膜液量相差k(小a-uim ...
- 2019-2020-1 20199305《Linux内核原理与分析》第十一周作业
ShellShock 攻击实验 (一)何为ShellShock? 2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发,这项漏洞 ...
- CSV和JSON格式相互转换
1.为什么要进行CSV与JSON格式之间的转换 CSV格式常用于一二维数据表示和存储,他是一种纯文本形式存储表格数据的表示方式.JSON也可以表示一二维数据.在网络信息传输中,可能需要统一表示方式,因 ...
- 集合系列 Set(七):LinkedHashSet
LinkedHashSet 继承了 HashSet,在此基础上维护了元素的插入顺序. public class LinkedHashSet<E> extends HashSet<E& ...
- 用dotnet core 搭建web服务器(一)http server
环境说明 dotnet core,开发需要安装dotnetcore sdk,运行需要安装 dotnetcore runtime 运行目前几乎支持所有常见平台 开发推荐windows10 平台 首先安装 ...
- ReactNative: 创建自定义List列表组件
一.介绍 在App中,很多数据消息显示都是一行行动态展示的,例如新闻标题,其实每一条新闻标题都可以独立成一个简单的列表组件,之前我们使用Text组件将数据都写死了,为了提高组件的灵活性,我们可以使用T ...
- js中触发表单提交
html代码: <form action="/test/action" method="get" id="myForm"> &l ...
- uni-app中onLoad不起作用
最近开始使用uni-app,坑还是很多的 今天在使用onLoad是发现,页面上的onLoad方法是可以起作用的,但是组件中的onLoad方法并没有起作用 后来经过一番尝试后还是不行,看文档发现uni- ...
- ASP.NET MVC教程二:ASP.NET MVC应用程序结构详解
在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示: 一.App_Data ...