Unix环境高级编程-学习-05-TCP/IP协议与套接字

news2024/11/17 0:20:05

目录

一、概念

二、TCP/IP参考模型

三、客户端和服务端使用TCP通信过程

1、同一以太网下

四、函数介绍

1、socket

(1)声明

(2)作用

(3)参数

(4)返回值

(5)通信域(协议族)相关宏

(6)套接字类型相关宏

(7)协议相关宏

(8)__domain和__type的组合

 2、socketpair

(1)声明

(2)作用

(3)参数

(4)返回值

 3、shutdown

(1)声明

(2)作用

(3)参数

(4)返回值

(5)how相关宏

五、参考书籍


一、概念

名称描述
套接字用于网络通信,应用与底层网络协议的一个接口。
协议交换信息的两个部分之间相互理解的一组规则、约定和数据结构的集合。
应用层负责处理应用的特定细节。像FTP、Telnet、E-mail等协议都属于应用层协议。
传输层负责为两台机器上的应用程序提供端到端的数据通信,常用协议有TCP(传输控制协议)和UDP(用户数据报协议)。
网络层负责IP报文的路由选择,也称为IP层,最重要的功能是路由,每一个IP报文包含源地址和目的地址。常用的IP协议有IPv4和IPv6。IP协议提供无连接的、不可靠的数据报传输服务,只是尽可能传送每一个IP报文到指定的地址,但不保证报文可靠地到达。TCP应用情况下,TCP保证可靠性。UDP应用情况下,可靠性由应用自己保证。
网络接口层由设备驱动程序和网卡组成,负责发送和接收IP数据报,应用程序几乎不涉及此层。
IPv4使用32位的地址,是20世纪80年代以来一直使用的一种协议。
IPv6使用128位的地址,为了应对20世纪90年代中期网络的快速增长而设计的。
TCP是面向连接的,提供客户端和服务端之间的连接。此协议可以保证为用户提供可靠的、顺序的、不重复的和全双工的字节流。
UDP是一种面向无连接的协议,其不需要在客户端和服务端建立连接,因此不保证数据报一定到达目的地和到达的顺序。
路由指分组从源端到目的端时,决定端到端路径的网络范围的进程。概括总结就是:路由接收数据包->查看目的地址->与路由表进行匹配找到转发端口->转发到该端口。

二、TCP/IP参考模型

TCP/IP协议可以抽象成如下层次模型。套接字相当于应用程序和底层协议交互的一个接口,无论我们是从网络读取、写入、配置网络协议都要通过套接字。

三、客户端和服务端使用TCP通信过程

1、同一以太网下

客户端的信息从上至下,通过网络,从下至上到达服务端。

客户端程序将应用数据包装成TCP数据传输给TCP,TCP将自己的数据报包装成IP报文发送给IP,IP再次包装传递给以太网,服务端的IP接收来自网络驱动程序的信息,解开IP层的包装还原回TCP信息传给TCP,TCP解开其TCP包装还原为应用数据传递给服务端程序。

四、函数介绍

1、socket

(1)声明

int socket(int __domain, int __type, int __protocol)

(2)作用

在通信域__domain中创建一个类型为__type、协议为__protocol的套接字。

(3)参数

参数名描述
__domain通信域,其决定了通信时使用的网络协议族。
__type套接字类型。
__protocol协议,从协议族中选一个具体协议。如果不清楚协议族与协议的对应关系,可以使用宏IPPROTO_IP,来让系统选择默认协议。

(4)返回值

名称描述
成功返回套接字文件描述符。
失败-1

(5)通信域(协议族)相关宏

名称描述
AF_INET网络通信,IPv4英特网协议。
AF_INET6网络通信,IPv6英特网协议。
AF_UNIXUNIX通信域,同一台计算机内两个进程通过文件系统进行通信,以文件系统路径名作为套接字的地址。
AF_UNSPEC未指定。

(6)套接字类型相关宏

名称描述
SOCK_STREAM字节流套接字,提供面向连接的,双向、可靠、顺序和不重复的数据流,数据没有边界,可支持带外数据。
SOCK_DGRAM数据报套接字,支持双向通信,但不保证数据报时顺序、可靠和不重复的。
1、进程可能从数据报套接字拿到重复的数据。
2、数据发送顺序和数据接收顺序不同。
3、数据是有边界的,每次往数据报套接字写数据时,数据就会形成一个包。
4、数据报套接字没有连接,每次发包时需指定接收者的地址。
SOCK_RAW原始套接字,其可以越过高层协议直接访问底层协议(IP协议或网络的物理层)

(7)协议相关宏

名称描述
IPPROTO_IPIPv4网际协议,如果不清楚协议族与协议的对应关系,可以使用宏IPPROTO_IP,来让系统选择默认协议。
IPPROTO_IPV6IPv6网际协议
IPPROTO_ICMP英特网控制报文协议
IPPROTO_IGMP英特网组管理协议
IPPROTO_RAW原始IP数据包协议
IPPROTO_TCP传输控制协议
IPPROTO_UDP用户数据报协议
IPPROTO_SCTP流控制传输协议

(8)__domain和__type的组合

__domain和__type的组合下的默认协议(会给出名字),support表示支持组合,但无协议名。not support表示不支持。

__type\__domainAF_INETAF_INET6AF_UNIX
SOCK_STREAMTCPTCPsupport
SOCK_DGRAMUDPUDPsupport
SOCK_RAWIPv4IPv6not support

 2、socketpair

(1)声明

int socketpair(int domain, int type, int protocol, int socket_vector[2]);

(2)作用

在通信域__domain中创建两个类型为__type、协议为__protocol的套接字,通常应用于父子进程间通信,类型于管道,两个文件描述符一个用于父进程一个用于子进程,不用的一方需关闭,每个套接字都是全双工的,可读可写,但个人感觉没有管道灵活,管道适用于子进程是另外的程序,映射到标准输入输出。匿名管道相关知识点可以参考之前的博客《Unix环境高级编程-学习-04-匿名管道PIPE》。

(3)参数

参数名描述
domain通信域,其决定了通信时使用的网络协议族。
type套接字类型。
protocol协议,从协议族中选一个具体协议。如果不清楚协议族与协议的对应关系,可以使用宏IPPROTO_IP,来让系统选择默认协议。
socket_vector两个套接字文件描述符,全双工。

(4)返回值

名称描述
成功0
失败-1

 3、shutdown

(1)声明

int shutdown(int socket, int how);

(2)作用

相较于close函数更灵活,可以关闭套接字的部分或全部,例如:套接字是全双工的,我们只是想从套接字读数据,我们就可以关闭它的写功能。

(3)参数

参数名描述
socket需要关闭的套接字。
how如何关闭套接字。

(4)返回值

名称描述
成功0
失败-1

(5)how相关宏

名称描述
SHUT_RD禁用进一步的接收操作。
SHUT_WR禁用进一步的发送操作。
SHUT_RDWR禁用进一步的发送和接收操作。

五、参考书籍

编号名称
1《UNIX Linux程序设计教程》
2《UNIX 环境高级编程》
3《UNIX 网络编程》

这三本写的都很好,建议大家有时间多阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1515543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

先初始化读取数据,然后才填充(低级错误,引以为戒)

本来是先初始化,然后读取数据。 结果上下两句写反了,一直报错。断点打了两个小时,才发现

2024年信息技术与计算机工程国际学术会议(ICITCEI 2024)

2024年信息技术与计算机工程国际学术会议(ICITCEI 2024) 2024 International Conference on Information Technology and Computer Engineering ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 大会主题: 信息系统和技术…

Prompt提示工程上手指南:基础原理及实践(二)-Prompt主流策略

前言 上篇文章将Prompt提示工程大体概念和具体工作流程阐述清楚了,我们知道Prompt工程是指人们向生成性人工智能(AI)服务输入提示以生成文本或图像的过程中,对这些提示进行精炼的过程。生成人工智能是一个根据人类和机器产生的数…

42.坑王驾到第八期:uniCloud报错

uniCloud 报错 今天调用云函数来调试小程序的时候突然暴了一个奇葩错误,require(…).main is not a function。翻官方文档后发现,原来是这样:**如果你写的是云对象,入口文件应为 index.obj.js,如果你写的是云函数入口…

Oracle 主从切换脚本

一、 切换前预检查 1. dg_precheck_main_v1.4.sh #!/bin/bash#********************************************************************************** # Author: Hehuyi_In # Date: 2022年06月16日 # FileName: dg_precheck_main_v1.4.sh # # For sys user, execute the sc…

Vue.js+SpringBoot开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

java数据结构与算法刷题-----LeetCode491. 非递减子序列

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路:时间复杂度O( n 2 ∗ n n^2*n n2∗n),空间复…

COSCUP 2024 正式启动议题征集,开源社专属邀请通道开启,欢迎报名参加!

COSCUP 是由台湾开放原始码社群联合推动的年度研讨会,起源于 2006 年,是台湾自由软体运动 (FOSSM) 重要的推动者之一。活动包括有讲座、摊位、社团同乐会等,除了邀请国际的重量级演讲者之外,台湾本土的自由软体推动者也经常在此发…

深入学习React开发:从基础到实战

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 引言 React是一款流行的JavaScript库&#xf…

基于R语言piecewiseSEM结构方程模型在生态环境领域技术教程

原文链接:基于R语言piecewiseSEM结构方程模型在生态环境领域技术应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247597092&idx7&sn176695e746eccff68e04edda6521f131&chksmfa823dc3cdf5b4d5b77181eb1bd9a2d659ff38e23c7ea78d33bc1cc7d0…

HSE化工应急安全生产管理平台:衢州某巨大型化工企业的成功应用

在化工行业中,安全生产一直是至关重要的议题。为了提高生产安全性、降低成本并提升企业形象,衢州某巨大型化工企业引入了HSE化工应急安全生产管理平台,取得了显著的改善和获益。 该平台的核心功能包括风险管理和应急预案制定。通过对化工生产…

活动图高阶讲解-03

1 00:00:00,000 --> 00:00:06,260 刚才我们讲了活动图的历史 2 00:00:06,260 --> 00:00:11,460 那我们来看这个活动图 3 00:00:11,460 --> 00:00:15,260 如果用来建模的话怎么用 4 00:00:15,260 --> 00:00:20,100 按照我们前面讲的软件方法的工作流 5 00:00:20…

vite ts vue 项目提示 . Projects must list all files or use an include pattern.

vite ts vue 项目提示 . Projects must list all files or use an include pattern. 在引用一个 ts 的时候,提示如下: 需要在 tsconfig.node.json 文件中添加: {"compilerOptions": {"composite": true,"skipLibC…

微信小程序一次性订阅requestSubscribeMessage授权和操作详解

一次性订阅:用户订阅一次发一次通知 一、授权 — requestSubscribeMessage Taro.requestSubscribeMessage({tmplIds: [], // 需要订阅的消息模板的id的集合success (res) {console.log("同意授权", res)},fail(res) {console.log(拒绝授权, res)}})点击或…

拼图小游戏制作教程:用HTML5和JavaScript打造经典游戏

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

图片太大上传不了怎么调整?教你快速解决的办法

在日常工作学习中,经常有用到证件照的地方,比如考试报名证件照,办理各种证件、开学入学照、护照等等,有时候会因为证件照文件太大了、尺寸不符合导致上传不成功,今天就来教大家几个压缩图片大小的方法。 关于图片太大上…

C#Winform中DataBinding实现数据绑定实例

本文实例演示Winform中如何使用DataBinding实现数据绑定。 在我们实例开发中,经常会出现一个数据需要在多个界面中显示和使用。这时如果使用常规方法更新显示时,每个控件得更新都要在程序中体现,比较麻烦还容易遗漏。更好用的方法是使用DataBinding属性,常用的控件是label…

COOH-PEG-Galactose 羧基-聚乙二醇-半乳糖 Galactose 靶向肝肿瘤细胞

在生物体内,正常细胞通过有氧呼吸将糖类等物质分解代谢产生能量,从而供给细胞的增殖和生 长。而癌细胞似乎更为“蛮横”,它们主要依靠糖酵解作用为生,因此癌细胞代谢葡萄糖的速度比正 常细胞要快得多。值得注意的是,…

5.Python从入门到精通—Python 运算符

5.Python从入门到精通—Python 运算符 Python 运算符算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级 Python 运算符 Python语言支持以下类型的运算符: 算术运算符比较(关系)运算符赋…

【网络安全】手机不幸被远程监控,该如何破解,如何预防?

手机如果不幸被远程监控了,用三招就可以轻松破解,再用三招可以防范于未然。 三招可破解可解除手机被远程监控 1、恢复出厂设置 这一招是手机解决软件故障和系统故障的终极大招。只要点了恢复出厂设置,你手机里后装的各种APP全部将灰飞烟灭…