【Linux】网络基础及网络编程套接字

本文深入解析TCP/IP协议,涵盖网络编程基础知识,包括OSI七层模型与TCP/IP五层模型对比,详细阐述各层功能及通信流程。重点讨论IPV4与IPV6地址,端口作用,网络字节序概念,以及TCP与UDP协议特性,适用于初学者及进阶读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程:tcp/ip协议详解 图解http

网络基础1 网络发展背景—网络编程的前情提要

	网络通信协议:通信双方对通络通信数据信号的解析式
	协议分层:
		优点:将提供的服务,以及协议接口进行封装后,使用起来比较方便,替换起来更加清晰简单
	OSI七层参考模型:(参考)
	    按照网络通信中的协议,接口,服务对网络通信进行分层
	TCP/IP五层模型(来自于OSI七层模型)
  	    Tcp/IP是一组协议成为TCP/IP协议簇,最经典的两个TCP IP
  	    应用层:负责应用程序间的**沟通**;http网页间传输 ftp文件协议
  	    传输层:负责端与端之间的数据**传输**;tcp/udp;
  	    网络层:负责地址管理与路由选择;(路径选择) IP;路由器;
  	    链路层:负责相邻设备之间的**数据帧**传输;(网络层)以太网协议(eth);交换机;
  	    物理层:负责光电信号的传输;(物理层)以太网协议(网线粗细等问题);集线器;
  	通信流程:

通信流程

网络编程套接字

套接字编程(socket编程)
	IP地址:IPV4
		功能:网络主机的唯一标识
		数据:无符号4个字节的整数	uint_32_t
		源ip地址->目的ip地址
		数量:43亿~不够用
			1.仅为正在上网者分配---dhcp(ip自动分配)
			2.ip地址替换技术---NAT
	ip地址:IPV6 (16个字节)
		ipv6并不向下兼容IPV4--------造成其流行不起来
	
	port端口:
		数据类型:无符号2字节的整数		uint16_t	65535
		用于唯一标识主机上处理数据的进程
		源ip,源端口,目的ip,目的端口,协议(sig	sport dip dport proto)五元组--标识一条通信
网络字节序:
	字节序:cpu对数据进行存取的顺序---存储大小大于1个字节的数据
	大端字节序:低地址存高位	a[4]	01 02 03 04
	小端字节序:低地址存低位	a[4]	04 03 02 01
	0x 01 02 03 04
	【x86架构----小端】
	【MIPS架构----大端】
	通信双方无法确定对方电脑的字节序的时候,发送大于一个字节存储的数据就有可能造成数据错误
		解决方法:不管主机是大端还是小端,反正网络通信时候统一使用大端字节序进行通信
			数据类型:short	int	long	float	double
			网络字节序标准就是大端字节序
			主机字节序:当前主机字节序-不一定是大端/小端,取决于cpu架构,需进行判断;
套接字编程:
	网络通信的时候,链路层---eth,网络层--ip,传输层-tcp/udp,应用层
	传输层到底应该选择tcp还是udp好?分析利弊,视场景而定;
	tcp(传输控制协议)---有连接,可靠传输,面向字节流
		有连接:双方在线
		可靠传输:网络状况良好
		确保数据能够到达对端----保证数据的安全传输,传输灵活,传输速率低,粘包问题
	udp(用户数据报协议)---无连接,不可靠,面向数据包
		无法保证数据的安全传输----传输速度快,传输不够灵活,无粘包问题
	对数据安全性要求高的程序用tcp---典型场景----文件传输
	对数据的实时性要求比较高的程序用udp---典型场景:视频通话
	两台主机直接进行网络通信---必定有一方是主动方
	客户端(主动方)-----请求---->	服务端(被动方)
socket接口:
	操作系统提供的一套网络编程接口
	一个端口只能被一个进程使用,但一个进程可以使用多个端口
基于udp协议实现网络通信:
		客户端						----》				服务器
		1.创建套接字(建立与网卡的关联)   		1.创建套接字
		/*2.为套接字绑定地址信息				2.为套接字绑定地址信息
		对于客户端来说,不推荐手动绑定*/
		-----------可以没有的操作!!!
		3.发送数据							3.接受数据
		4.接受数据							4.发送数据
		5.关闭套接字							5.关闭套接字
	1.socket()
	2.bind()
	3.sendto()
	4.recvfrom()
	5.close()

编写可参考基于udp协议实现网络通信:https://blog.youkuaiyun.com/quchen528/article/details/90059136

基于tcp协议的网络程序编程:
		服务端					《----			客户端
	1.创建套接字 					   		        1.创建套接字
	2.为套接字绑定地址信息        					2.
	3.开始监听									3.向服务器发起连接请求
	4.获取连接成功的客户端socket描述符				4.接收/发送数据
	5.通过新的socket接收/发送数据					5.关闭socket
	6.关闭socket

三次握手建立连接

tcp的服务端会为每一个客户端都建立一个新的socket,用这个新的socket专门用于跟客户端进行通信
	一开始创建的socket,可以接收所有客户端的连接请求,一旦与客户端连接建立成功,操作系统会为客户端建立单独的socket进行数据通信
	一开始的socket称之为:监听socket(仅用于建立连接)
	后边为每一个客户端创建的socket称之为:数据传输socket(专门用于数据传输)
	监听socket与数据传输socket的区别,就如等待客服和专属客服正在服务的区别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quchen528

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值