Linux网络基础编程|学习笔记

简介: 快速学习Linux网络基础编程

开发者学堂课程【TCP/IP 网络基础:Linux网络基础编程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/791


Linux网络基础编程

 

内容简介

一、socket的概念

二、socket的类型

三、socket的位置

四、网络地址

五、端口号

六、字节序

七、socket基础编程

 

一、socket的概念

image.png

Linux中的网络编程是通过socket接口来进行的。

socket是一种特殊的I/O接口,它也是一种文件描述符。它是一种常用的进程之间的通信,而且通过网络能够在不同的机器上的进程之间进行通信。

socket也有一个类似于打开文件的函数调用,该函数返回一个整型的 socket描述符,随后的连接建立,数据传输等操作都是通过socket来实现的。

二、socket的类型

image.png

(1)流式socket((socketSOCKSTREAM)

流式套接字提供可靠的、面向连接的通信流:它使用TCP协议,从而保证了数据传输的正确性和顺序性。

(2)数据报socket(SOCK DGRAM)

数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,而且是不保证是可靠、无差错的。它使用数据报协议UDP

(3)原始socket

原始套接字允许对底层协议如PICMP进行直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。

三、socket的位置

image.pngimage.pngimage.png

四、网络地址

image.png

image.png

image.png

五、端口号

端口号

为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端。口号来区分TCP端口号与UDP端口号独立。

端口号一般由ANA(Internet Assigned Numbers Authority)管理

众所周知端口:1~1023(1-255之间为众所周知端口,256~1023端口通常由UNX系统占用)

注册端口:1024~49150

动态或私有端口:49151~65535

image.png

套接字和端口

image.pngimage.png

六、字节序

字节序

不同类型CPU的主机中,内存存储多字节整数序列有两种方法,称为主机字节序(HO):

小端序(little-endian-)

低序字节存储在低地址,将低字节存储在起始地址IntelAMD等采用的是这种方式。

大端序(big-endian-)

高序字节存储在低地址,将高字节存储在起始地址ARMMotorola等采用这种方式。

网络中传输的数据必须按网络字节序,即大端字节序。

在大部分PC机上,当应用进程将整数送入 socket,需要转化成网络字节序;当应用进程从socket取出整数后,要转化成小端字节序。

image.pngimage.png

网络字节序(n- Network Byte Order)

把给定系统所采用的字节序称为主机字节序,为了避免不同类别主机之间在数据交换时由于字节序不同而导致的差错,引入了网络字节序。使用统一的字节顺序,避免兼容性问题

不同主机的HBO(Host Byte Order)是不一样的,这与CPU的设计有关。

Motorola68K系列,ARM系列,HBONBO是一致的。

Intel X86系列,HBONBO是不一致的

image.png

字节序转换函数

这里用到了四个函数: htons, ntohs0, htonlhtohl0,这四个函数分别实现网络字节序和主机字节序的转化,这里的h代表ost,nnetwork,sshort表代表long.通常16位的P端口号用s表示,P地址用I表示。

image.png

七、Socket基础编程

网络编程相关API

网络编程常用函数:

socket:用于建立个socketi连接,可指定socket类型等信息在建立了socket连接之后可对sockaddrsockaddrin结构进行初始化,以保存所建立的socket地址信息。

bind:用于将本地IP地址绑定到端口号,若绑定其他P地址则不能成功另外,它主要用于TCP连接,而在UDP的连接中则无必要。

listen():在服务端程序成功建立套接字和与地址进行绑定之后,还需要准备在该套接字上接收新的连接请求此时调用listen()函数来创建一个等待队列,在其中存放未处理的客户端连接请求。

accept():服务端程序调用listen()函数创等待队列之后,调用 accept函数等待并接收客户端的连接请求。它通常从bind()所创建的等待队列中取出第一个未处理的连接请求

image.png

网络编程常用函数:

connect():

该函数在TCP中是用于bind()的之后的客户端,用于与服务器建立连接,而在

UDP中由于没有了bind()函数,因此用connect有点类似bind函数的作用

send()recv():

这两个函数分别用于发送和接收数据,可以用在TCP,也可以用在UDP

中当用在UDP,可以在connect)函数建立连接之后再用

sendto()和recvfrom():

这两个函数的作用与send(rec函数类似,也可以用在CPUDP,当用在TCP,后面的几个与地址有关参数不起作用,函数作用等同于sendrecv;当用在UDP,可以用在之前没有使用connect()的情况下,这两个函数可以自动寻找指定地址并进行连接。

image.png

socket

image.png

Socket信息数据结构

image.png

地址结构的一般用法

1定义一个struct sockaddr in类型的变量并清空

struct sockaddr in myaddr:

memset(&myaddr, 0, sizeof(myaddr))

2填充地址信息

myaddr.sin family AF INET;

myaddr.sin port =htons (8888);

myaddr.sin addr.s addr inet addr ("192.18.1.100");

image.png

bind()

该函数是用于将本地地址绑定到端口号若绑定其他P地址则不能成功。另外,它主要用于TCP的连接,而在UDP的连接中则无必要。

image.png

image.png

listen()

在服务端程序成功建立套接字和与地址进行绑定之后,还需要在该套接字上接收新的连接请求。此时调用listen()函数来创建一个等待队列,在其中存放未处理的客户端连接请求。


accept()

服务端程序调用listen()函数创建等待队列之后,调用accept()函数等待并接收客户端的连接请求。它通常从由bind()所创建的等待队列中取出第一个未处理的连接请求。



connect()

Socket基础编程

connect)

该函数在TCP中是用于bind之后的client,用于与服务器端建立连接,而在UDP中由于没有了bind()函数,因此用connect()有点类似bind()函数的作用。


send()和recv():

这两个函数分别用于发送和接受数据。


image.png

相关文章
|
2月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
67 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
3月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
164 18
|
3月前
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
165 5
|
4月前
|
Web App开发 网络协议 Linux
【Linux】网络基础
TCP/IP五层模型是网络通信的基础框架,将复杂的数据传输过程分为物理层、数据链路层、网络层、传输层和应用层,每层各司其职,协同完成远程通信。该模型确保了不同设备和网络之间的互联互通,是现代互联网运行的核心机制。
235 5
|
4月前
|
网络协议 Linux 开发者
深入Linux中UDP网络通信机制编程探索
以上步骤概述了Linux中UDP网络通信的编程机制。在实现时,因关注细节和上下文环境可能有所调整,但大致流程是一致的。这些知识片段旨在帮助开发者快速上手Linux下的UDP编程,并提供可靠的信息作为编程的基础。在编程实践中,应结合实际业务需求,设计合适的数据传输协议,确保数据的正确性和实时性。
84 0
|
6月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
170 18
|
6月前
|
安全 算法 Ubuntu
Linux(openssl)环境:编程控制让证书自签的技巧。
总结:在Linux环境中,OpenSSL是一个非常实用的工具,可以帮助我们轻松地生成自签名证书。通过上述三个简单步骤,即可为内部网络、测试环境或开发环境创建自签名证书。但在公共访问场景下,建议购买经过权威认证机构签发的证书,以避免安全警告。
265 13
|
6月前
|
Linux 数据安全/隐私保护
使用Linux命令行接入无线网络Wi-Fi的示例。
现在,你已经使用命令行成功地连接到 Wi-Fi 网络了。这两个示例涵盖了用 `nmcli` 和 `wpa_supplicant` 连接无线网络的常见场景,让你能够不依赖图形化界面来完成这个任务。在日常使用中熟练掌握这些基本操作能增强你对 Linux 系统的理解,帮助你更有效地处理各种问题。
354 12
|
6月前
|
安全 Ubuntu Linux
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
184 0
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
|
8月前
|
Ubuntu Linux
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
1148 20
下一篇
开通oss服务