【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,网络数 ...
随机推荐
- docker可视化工具Portainer部署与汉化
为了更好的观察Docker运行状态,我们采用Portainer工具进行可视化,下面是部署过程总结: 环境: Liunx:CentOS Linux release 7.6.1810 (Core) Doc ...
- Oracle处理关于sysaux表空间爆满的问题---更新最新方法!!
对于SYSAUX表空间而言,如果占用过大,那么一般情况下是由于AWR信息或对象统计信息没有及时清理引起的,具体原因可以通过如下的SQL语句查询: SELECT OCCUPANT_NAME ORDER ...
- 一个简单的WebServer,socket+threading
一个简单的WebServer import socket import threading body = '<h1> web server </h1>' response_pa ...
- ism 发布
ism 发布 ism 发布 ism 发布
- 苹果 macOS 安装 Source Code Pro
1. 下载 到 Source Code Pro 的 GitHub 官网下载:https://github.com/adobe-fonts/source-code-pro 点击 GitHub 中 ...
- web安全技术--XSS和CSRF
Xss一般是脚本代码,主要是JS的,但是也有AS和VBS的. 主要分为反射型,存储型,DOM型三个大类. 一般来讲在手工测试的时候先要考虑的地方就是哪里有输入那里有输出. 然后是进行敏感字符测试,通常 ...
- MyBatis核心对象之StatementHandler
MyBatis核心对象之StatementHandler StatementHandler ResultHandler ParameterHandler Executor org.apache.iba ...
- Codeforces Round #607 (Div. 1)
A. Cut and Paste 题解 在计算答案的时候,我们发现只需要知道这个字符串前\(l\) 个具体是啥就行了.所以对于每一组询问,我们暴力把这个字符串前\(l\) 的位都算出来,然后剩下的就推 ...
- HTML中跨域请求天气粗略效果
HTML中跨域请求天气粗略效果 html+css部分: <style> table{ border:1px red solid; border-collapse: collapse; ma ...
- Sqlite-net 修改版 支持中文和CodeFirst技术
最近, 做的一个windows 桌面WPF程序, 需要数据库支持.尝试了 sql server 的开发版,使用EF , 效率太低.后来采用sqlite数据库,中间踩坑无数.但最终完美的解决了这些问题. ...