您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

网编基础,我只看这篇文章,网络编程基础篇

时间:2020-12-01 15:37:37  来源:  作者:

计算机网络

计算机网络是指由通信线路互相连接的许多独立自主工作的计算机构成的资源共享集合体。

  • 计算机网络作用:资源共享。
  • 计算机网络组成:许多独立自主工作的计算机。
  • 计算机网络实现方式:使用通信线路互相连接。
基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

网络的分类

按照地理范围分类

  • 局域网(Local Area.NETwork---LAN)
  • 覆盖范围一般不超过数十公里,通常是一幢建筑物内、相邻的几幢建筑物之间或者是一个园区的网络。(短距离、高速率、高可靠、低成本)
基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

  • 广域网(Wide Area Netword---WAN)
  • 覆盖范围通常为数百公里到数千公里,甚至数万公里,可是一个地区或一个国家,世界几大洲或整个地球。(长距离、低速率、高成本)
  • 城域网(Metroplolitan Area Network---MAN)
  • 覆盖的地理范围介于局域网和广域网之间,通常为数十公里到数百公里的一座城市内。
  • 注意点:
  • 因特网(英文名为Internet)
  • 就是全世界最大的国际计算机互联网络,是一个建立在计算机网络之上的网络,众多网络用户的参与使因特网成为宝贵的信息资源。形象地说,中国先民最早用“线”将知识和信息串在一起,今天因特网将人类历史所有的知识和信息都连在一起!这里需要解释互联网与因特网的概念。当不同的网络连接起来时就组成了互联网(internet,不要与因特网Internet混淆),“互联网”通常是只代表一般网络互联的意思,比如把一个LAN与WAN连接起来,或者连接两个LAN就组成互联网,而“因特网”是指特定的世界范围的互联网。

按照管理方式分类

  • 对等网 (Peer to Peer)通常是由很少几台计算机组成的工作组。对等网采用分散管理的方式,网络中的每台计算机既作为客户机又可作为服务器来工作,每个用户都管理自己机器上的资源。
  •  
基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

  • 客户机/服务器网 (Client/Server) 网络的管理工作集中在运行特殊网络操作系统服务器软件的计算机上进行,这台计算机被称为服务器,它可以验证用户名和密码的信息,处理客户机的请求。而网络中其余的计算机则不需要进行管理,而是将请求通过转发器(Redirector)发给服务器。
  •  

专栏
C语言入门精品视频教程合集
作者:C语言基础
99.9币
73人已购
查看

专栏
C语言快速上手小游戏制作
作者:C语言基础
29.9币
30人已购
查看

按照传输方式分类

  • 广播网络 (Broadcasting Network)网络中的计算机或设备通过一条共享的通信介质进行数据传播,所有节点都会收到任何节点发出的数据信息。这种传输方式主要应用于局域网中。广播网络中有三种传输类型:单播、组播和广播。
  • 点对点网络 (Point to Point Network) 网络中的计算机或设备通过单独的链路进行数据传输,并且两个节点间都可能会有多条单独的链路。这种传播方式主要应用于广域网中。
  •  
基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

OSI(开放式系统互联通信)七层网络模型

(参考模型 英语:Open System Interconnection Reference Model,缩写为 OSI

OSI网络模型是一个开放式系统互联的参考模型。通过这个参考模型,用户可以非常直观地了解网络通信的基本过程和原理。OSI参考模型如下图所示:

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

应用层

OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。

实际公司A的老板就是我们所述的用户,而他要发送的商业报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商业合同,发一份询价单,等等。

表示层

表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。

由于公司A和公司B是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层(公司的文秘),就是将应用层的传递信息转翻译成英语。同时为了防止别的公司看到,公司A的人也会对这份报价单做一些加密的处理。这就是表示的作用,将应用层的数据转换翻译等。

会话层

会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。

会话层的同事拿到表示层的同事转换后资料,(会话层的同事类似公司的外联部),会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,这里公司就是实际传递过程中的实体。他们要管理本公司与外界好多公司的联系会话。当接收到表示层的数据后,会话层将会建立并记录本次会话,他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式。准备将资料寄出。等到确定公司B接收到此份报价单后,此次会话就算结束了,外联部的同事就会终止此次会话。

传输层

传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。

传输层就相当于公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。

网络层

本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。

空运好像直接就飞到北京了,首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再寄到北京顺义集散中心。这个每个集散中心,就相当于网络中的一个IP节点。

数据链路层

将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用mac地址)来访问介质,并进行差错检测。数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。

MAC子层处理CSMA/CD算法、数据出错校验、成帧等;LLC子层定义了一些字段使上次协议能共享数据链路层。 在实际使用中,LLC子层并非必需的。

规则,检验路口

物理层

实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。

快递寄送过程中的交通工具,就相当于我们的物理层,例如汽车,火车,飞机,船。

TCP/IP五层模型

(TCP(Transmission Control Protocol)传输控制协议用于保证被传送信息的完整性) (IP(Internet Protocol)网际互连协议负责将消息从一个地方传送到另一个地方)

在每一层实现的协议也各不同,即每一层的服务也不同,其中每层中具体的协议如下图

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层的,一般的路由器是工作在网络层的,

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

TCP/IP协议:是一个协议簇,其包括了很多协议。例如,FTP(文本传输协议)、SMTP(邮件传输协议)等应用层协议。TCP/IP协议的网络模型只有4层,包括数据链路层、网络层、数据传输层和应用层

协议:网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

网络地址

IP 地址是IP协议提供的一种地址格式,它为Internet上的每一个网络和每一台主机分配一个网络地址,以此来屏蔽物理地址的差异。是运行TCP/IP协议的唯一标识。

IP地址结构:网络部分+机器部分

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

windows查看IP:ipconfig

域名系统DNS()

(英文:Domain Name System,缩写:DNS

DNS采用分层次结构,入网的每台主机都可以有一个类似下面的域名:

主机名.机构名.顶层域名

moe.edu.cn 中国教育部

从左到右,域的范围变大。具有实际含义,比IP地址好记。Internet上几乎在每一子域都设有域名服务器,服务器中包含有该子域的全体域名和地址信息。Internet每台主机上都有地址转换请求程序,负责域名与IP地址转换。

顶级域名分为类型名和区域名两类。类型名共14个,区域名用两个字母表示世界各国和地区,

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

中国互联网络的域名体系:

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

windows域名解析指令:Nslookup

URL(统一资源定位系统)

(统一资源定位系统 uniform resource locator,缩写:URL)

统一资源定位系统是因特网的万维网服务程序上用于指定信息位置的表示方法。

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

端口号

所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号。

  • 公认端口(0-1023)
  • 21端口:FTP 文件传输服务
  • 22端口:SSH 远程连接服务
  • 23端口:TELNET 终端仿真服务
  • 25端口:SMTP 简单邮件传输服务
  • 53端口:DNS 域名解析服务
  • 80端口:HTTP 超文本传输服务
  • 443端口:HTTPS 加密的超文本传输服务
  • 注册端口(1024-49151)
  • 3306端口:MySQL数据库端口
  • 5432端口:postgresql数据库端口
  • 6379端口:redis数据库端口
  • 8080端口:TCP服务端默认端口
  • 8888端口:Nginx服务器的端口
  • 9200端口:Elasticsearch服务器端口
  • 27017端口:mongoDB数据库默认端口
  • 22122端口:fastdfs服务器默认端口
  • 私有端口(49152-65535)

理论上,不应把常用服务分配在这些端口上。实际上,有些较为特殊的程序,特别是一些木马程序就非常喜欢用这些端口,因为这些端口常常不被引起注意,容易隐蔽。

windows查看端口号:netstat

SMTP

(简单邮件传输协议 ,imple Mail Transfer Protocol,缩写:SMTP)

SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。

电子邮件地址:用户名@电子邮件服务器

电子邮件系统:

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

HTTP

(超文本传输协议,HyperText Transmit Protocol,缩写:HTTP)

http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。特点如下:

  • 基于TCP/IP的一个应用层的协议
  • 典型的C/S结构的工作方式
  • 可以传输任意类型的数据对象
  • 面向一次连接、无状态的网络协议
基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

FTP

(文件传输协议:File Transfer Protocol,缩写:FTP)

FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

使用FTP传送文件要求在远程机上有一个账号,提供匿名FTP服务的主机上有一个公共的anonymous(匿名的)账号。

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

如何接入因特网

  • LAN接入:常用于单位用户, 局域网上的所有用户有同样的IP地址
  • 拨号接入:常用于个人用户, 用户没有固定IP地址. (但每次接入时都有唯一的IP地址)
基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

ISP(互联网服务提供商 internet Service Provider)

PPP(点对点协议 Point to Point Protocol)

基于服务器的网络结构

Client/Server结构(胖客户机)C/S

Browser/Server结构(瘦客户机)B/S

SOCKET 套接字

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。

套接字分类

1.流套接字(SOCK_STREAM)

流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议 。

2.数据报套接字(SOCK_DGRAM)

数据报套接字提供一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP( User DatagramProtocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理 。

3.原始套接字(SOCK_RAW)

原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送的数据必须使用原始套接

三次握手

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

所谓的“三次握手”:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接,图示如下:

第一次握手

客户端向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时随机生成初始序列号 seq=x,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。这个三次握手中的开始。表示客户端想要和服务端建立连接。

第二次握手

TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己随机初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。这个报文带有SYN(建立连接)和ACK(确认)标志,询问客户端是否准备好。

第三次握手

TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。这里客户端表示我已经准备好。

AYN:同步序列编号(*Synchronize Sequence Numbers*)。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

ACK: (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

思考:为什么要三次握手呢,有人说两次握手就好了

举例:已失效的连接请求报文段。

client发送了第一个连接的请求报文,但是由于网络不好,这个请求没有立即到达服务端,而是在某个网络节点中滞留了,直到某个时间才到达server,本来这已经是一个失效的报文,但是server端接收到这个请求报文后,还是会想client发出确认的报文,表示同意连接。假如不采用三次握手,那么只要server发出确认,新的建立就连接了,但其实这个请求是失效的请求,client是不会理睬server的确认信息,也不会向服务端发送确认的请求,但是server认为新的连接已经建立起来了,并一直等待client发来数据,这样,server的很多资源就没白白浪费掉了,采用三次握手就是为了防止这种情况的发生,server会因为收不到确认的报文,就知道client并没有建立连接。这就是三次握手的作用。

四次挥手

四次挥手,别名连接终止协议。其性质为终止协议,图示如下:

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

第一次挥手

TCP发送一个FIN(结束),用来关闭客户到服务端的连接。客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

第二次挥手

服务端收到这个FIN,他发回一个ACK(确认),确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

第三次挥手

服务端发送一个FIN(结束)到客户端,服务端关闭客户端的连接。服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手

客户端发送ACK(确认)报文确认,并将确认的序号+1,这样关闭完成。客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

思考:那么为什么是4次挥手呢?

为了确保数据能够完成传输。

关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。可能有人会有疑问,tcp我握手的时候为何ACK(确认)和SYN(建立连接)是一起发送。挥手的时候为什么是分开的时候发送呢.因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭 SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步挥手

思考:客户端突然挂掉了怎么办?

正常连接时,客户端突然挂掉了,如果没有措施处理这种情况,那么就会出现客户端和服务器端出现长时期的空闲。解决办法是在服务器端设置保活计时器,每当服务器收到客户端的消息,就将计时器复位。超时时间通常设置为2小时。若服务器超过2小时没收到客户的信息,他就发送探测报文段。若发送了10个探测报文段,每一个相隔75秒,还没有响应就认为客户端出了故障,因而终止该连接。

SOCKET基本操作

既然socket是“open—write/read—close”模式的一种实现,那么socket就提供了这些操作对应的函数接口。

TCP Sockets 编程基本流程

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

UDP Sockets 编程基本流程

基础好文|初学者:网编基础,我只看这篇文章,网络编程基础篇

 

UDP:

  • 连接:发送数据不需要创建连接,分为发送端和接收端
  • 大小:发送数据以包为单位进行发送,每个包的大小限制在64k
  • 传输速度快,可能会造成数据丢失
  • 相比TCP协议来说传输速度更快
  • 应用:直播,视频通话

TCP:

  • 连接:数据传输可靠,传输之前需要连接
  • 大小:数据通过IO流的方式进行传输,可以传输无限大小的数据
  • c/s:有服务端和客户端之分,也就是平时说的C/S(Client/Server)结构
  • 相比UPD传输速度慢

SOCKET接口介绍

1.初始化创建socket对象

int socket (int domain, int type, int protocol)
'domain   : 协议族。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等协议族
'type     : socket类型
            'TCP类型: SOCK_STREAM
            'UDP类型: SOCK_DGRAM
            '原始类型: SOCK_RAW
'protocol : 通常赋值"0",由系统自动选择

2.创建的socket绑定到指定的IP地址和端口

int bind(int sockfd, const struct sockaddr* myaddr, socklen_t addrlen)
'sockfd    : socket()函数返回的描述符
'myaddr    : 指明要绑定的本地IP和端口号,使用网络字节序
'addrlen   : 常被设置为sizeof(struct sockaddr)

IP与端口设置:

my_addr.sin_port = 0;                   /* 系统随机选择一个未被使用的端口号 */ 
my_addr.sin_addr.s_addr = INADDR_ANY;   /* 填入本机IP地址 */ 

3.监听服务

int listen(int sockfd, int backlog)
'sockfd     : socket()函数返回的描述符
'backlog    : 套接字维护的最大连接个数,大多数系统缺省值为20

4.接受请求

int accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen)
'sockfd     : socket()函数返回的描述符
'addr       : 存放发起连接请求的客户端的协议地址
'addrlen    : 指明输出时addr的实际长度

5.连接函数

int connect(int sockfd, struct sockaddr *serv_addr, int addrlen)
'sockfd     : 本地客户端额socket描述符
'serv_addr  : 服务器协议地址
'addrlen    : 地址缓冲区的长度

6.TCP类型的数据发送

int send(int sockfd, const void *msg, int len, int flags)
'sockfd     : 发送端套接字描述符
'msg        : 发送数据的缓冲区
'len        : 待发送数据的字节长度
'flags      : 一般情况下置为0

7.TCP类型的数据接受

int recv(int sockfd, void *buf, int len, unsigned int flags)
'sockfd     : 接收端套接字描述符
'buf        : 接收缓冲区的基地址
'len        : 以字节计算的接收缓冲区长度
'flags      : 一般情况下置为0

8.UDP数据发送

using ADDR=const struct sockaddr;  
int sendto(int sockfd, const void *msg, int len, unsigned int flags, ADDR *dst_addr, int addrlen)
'sockfd     :发送端套接字描述符
'msg        :待发送数据的缓冲区
'flags      : 一般情况下置为0
'dst_addr   : 数据发送的目的地址
'addrlen    : 地址长度

9.UDP数据接受

int recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, int*fromlen)
'sockfd     : 接收端套接字描述
'buf        : 用于接收数据的应用缓冲区地址
'len        : 用于接收数据的应用缓冲区地址
'flags      : 指名缓冲区大小
'src_addr   : 通常为0
'fromlen    : 数据来源端的地址

10.字节序转换函数

把给定系统所采用的字节序称为主机字节序。为了避免不同类别主机之间在数据交换时由于对于字节序解释的不同而导致的差错,引入了网络字节序,即网络传输所采用的字节序。规定网络字节序使用“Big-Endian”(大端模式)方式。

主机到网络:

u_long htonl(u_long hostlong);
u_short htons(u_short short);

网络到主机:

u_long ntohl (u_long hostlong);
u_short ntohs (u_short short);

11.初始化套接字库

int WSAStartup(WORD wVersion,LPWSADATA lpWSAData);
'wVersion   : Windows Socket的版本
'lpWSAData  : WSAData结构指针

12.地址结构体

ipv4对应的是:
struct sockaddr_in {
    sa_family_t    sin_family; 
    in_port_t      sin_port;   
    struct in_addr sin_addr;   
};
struct in_addr {
    uint32_t       s_addr;     
};
ipv6对应的是:
struct sockaddr_in6 { 
    sa_family_t     sin6_family;    
    in_port_t       sin6_port;      
    uint32_t        sin6_flowinfo;  
    struct in6_addr sin6_addr;      
    uint32_t        sin6_scope_id;  
};

struct in6_addr { 
    unsigned char   s6_addr[16];    
};
Unix域对应的是:
#define UNIX_PATH_MAX    108
struct sockaddr_un { 
    sa_family_t sun_family;                
    char        sun_path[UNIX_PATH_MAX];   
};


Tags:网络编程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
引言本期分享一个比较常见的网络问题--丢包。例如我们去ping一个网站,如果能ping通,且网站返回信息全面,则说明与网站服务器的通信是畅通的,如果ping不通,或者网站返回的信息不全...【详细内容】
2022-04-21  Tags: 网络编程  点击:(235)  评论:(0)  加入收藏
之前介绍了网络字节序。网络编程之网络字节序详解今天就来实现一下简单的网络程序。先看几个函数// 创建socket套接字int socket(int domain, int type, int protocol);//...【详细内容】
2022-03-17  Tags: 网络编程  点击:(90)  评论:(0)  加入收藏
IP地址和端口号1)IP地址用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。2)IP地址分类IPV4:32位地址,以点分十进制表示,如192.168.0.1IPV6:128位(16个字节)写成...【详细内容】
2022-03-17  Tags: 网络编程  点击:(92)  评论:(0)  加入收藏
目录4、TCP网络传输的基本流程二、网络编程套接字(socket)5、cookie和session的用法6、基本实现http协议的代码四、传输层协议TCP和UDP4、TCP和UDP之间的对比六、数据链路层和...【详细内容】
2022-01-04  Tags: 网络编程  点击:(144)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  Tags: 网络编程  点击:(80)  评论:(0)  加入收藏
当初写第一个网络程序的时候,就是通过搜索,找各种实例把程序拼凑出来的,并没有进行深入的理解。这个东西用了这么多年,是该来沉淀一下了,也检验一下自己对这块知识的掌握程度。可...【详细内容】
2021-10-18  Tags: 网络编程  点击:(139)  评论:(0)  加入收藏
网络工程领域不断出现新的协议、技术、交付和运维模式。传统网络面临着云计算、人工智能等新连接需求的挑战。企业也在不断追求业务的敏捷、灵活和弹性。在这些背景下,网络自...【详细内容】
2021-02-03  Tags: 网络编程  点击:(280)  评论:(0)  加入收藏
计算机网络计算机网络是指由通信线路互相连接的许多独立自主工作的计算机构成的资源共享集合体。 计算机网络作用:资源共享。 计算机网络组成:许多独立自主工作的计算机。 计...【详细内容】
2020-12-01  Tags: 网络编程  点击:(146)  评论:(0)  加入收藏
Linux网络编程API函数初步剖析今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作。 1、socket...【详细内容】
2020-11-03  Tags: 网络编程  点击:(87)  评论:(0)  加入收藏
01.为何会有HttpsHttp的缺点通信使用明显通信使用明显意味着安全性大大降低,当通信过程被窃听后,无需花费额外的投入就可看到传输的数据。例如使用抓包工具,无需任何配置就可...【详细内容】
2020-09-26  Tags: 网络编程  点击:(82)  评论:(0)  加入收藏
▌简易百科推荐
1. 前言了解响应式编程,首先我们需要了解函数式操作和Stream的操作,下面我们简单的复习一下喽。1.1 常用函数式编程函数式接口中我们先来回顾一下Java中的函数式接口。常见的...【详细内容】
2022-07-15  二哥学Java    Tags:编程   点击:(1)  评论:(0)  加入收藏
在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastify 构建一个 Full-stack 应用程序。在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastif...【详细内容】
2022-07-12  qaseven    Tags:全栈   点击:(9)  评论:(0)  加入收藏
好的软件开发网站有哪些?做软件开发哪些网站能提供帮助呢?这些很多做软件开发的小伙伴都会问到的问题。007出海全球社交流量导航网站,整合了多方出海跨境网站资源,为你介绍出海...【详细内容】
2022-07-08  Chuhai007    Tags:软件开发   点击:(10)  评论:(0)  加入收藏
我们用monkey做压力测试后,会保存一个monkey日志,那如果想快速的分析日志中有哪些异常,我们可以用批处理工具进行快速的筛查,我们一起来看看吧。先编写个小脚本,然后修改为bat后...【详细内容】
2022-07-08  溪流涌动    Tags:monkey   点击:(13)  评论:(0)  加入收藏
白盒测试落地实践分为两个大方向,一个是静态分析,一个是动态分析,当然啦,也可以叫做静态测试和动态测试。那我们如何高质量保效率的做好白盒测试呢?Parasoft已经为您准备好了成熟...【详细内容】
2022-07-08  Parasoft中国    Tags:白盒测试   点击:(11)  评论:(0)  加入收藏
Altium Designer 自带脚本功能的开发项目,可以调用官方AD API接口对原理图或者PCB进行自动操作,本文主要分享开发的流程,和一些基本的概念信息,本文介绍的脚本工具例子可以用在P...【详细内容】
2022-07-07  电子工程师伟哥    Tags:Altium Designer   点击:(21)  评论:(0)  加入收藏
一、目录介绍 前置知识点 NIO Netty 的核心组件 Channel Callback Future 和 Promise 事件和 ChannelHandler Hello World二、前置知识点1、NIO首先我们需要回顾一...【详细内容】
2022-07-06  架构师jickly    Tags:聊天系统   点击:(16)  评论:(0)  加入收藏
1.事件流事件流是对事件执行过程的描述,了解事件的执行过程有助于加深对事件的理解,提升开发实践中对事件运用的灵活度。2.捕获和冒泡捕获阶段是【从父到子】的传导过程,冒泡阶...【详细内容】
2022-07-06  金乾坤    Tags:API   点击:(13)  评论:(0)  加入收藏
刷盘策略CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略:public class CommitLog { public CompletableFuture<PutMe...【详细内容】
2022-07-06  Java码农之路    Tags:RocketMQ   点击:(16)  评论:(0)  加入收藏
最近读了本好书-《深度学习推荐系统》,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家。 本文将按照从算法到工程的顺序,先介绍一下推荐系统整体...【详细内容】
2022-07-05  InfoQ    Tags:推荐系统   点击:(22)  评论:(0)  加入收藏
站内最新
站内热门
站内头条