linux网络编程(一)
从“单纯建立连接”到“安全建立连接”(2010年)
网络体系结构即指网络的层次结构和每层所使用协议的集合
应用层
应用程序:FTP、E-mail、Telnet
传输层
差错处理/恢复,流量控制,提供可靠的数据传输
网络层
数据分组、路由选择
数据链路层
数据组成可发送、接收的帧
物理层
传输物理信号、接口、信号形式、速率
上下层之间进行交互时所遵循的约定叫做 “接口”
。
同一层之间的交互所遵循的约定叫做“协议”。
设备固有数据格式和网络标准数据格式的转换
(接受者和发送者如果使用的邮件客户端不一样,那么就会出现问题,如何实现用户之间的通信,那么就需要在表示层来起作用,
使得在不同的客户端上拥有相同的网络格式
)
地址管理与路由选择
,作用:在网络相互连接的环境中,将数据从发送端主机发送到接受端主机
数据帧
比特流
>。界定连接器和网络的规格。
TCP/IP协议族
:
应用层 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
传输层 TCP,UDP
网络层 IP,ICMP,RIP,OSPF,BGP,IGMP
网络接口与物理层 SLIP,CSLIP,PPP,ARP,RARP,MTU ,ISO2110,IEEE802.1,EEE802.2
TCP
(Transport Control Protocol)传输控制协议
UDP
(User Datagram Protocol)用户数据报协议
IP
(Internetworking Protocol)网间协议
SMTP
(Simple Mail Transfer Protocol)简单邮件传输协议
HTTP
(Hypertext Transfer Protocol) 超文本传输协议
FTP
(File Transfer Protocol)文件传输协议
ARP
(Address Resolution Protocol)地址解析协议
UDP和TCP
TCP(即传输控制协议)
它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
适用情况:
传输质量要求较高
,以及
传输大量数据的通信
。
靠数据传输
的场合,通常使用TCP协议
UDP(User Datagram Protocol)用户数据报协议
适用情况:
Socket
是一个编程接口
套接字类型:
流式套接字(SOCK_STREAM)
数据报套接字(SOCK_DGRAM)
原始套接字(SOCK_RAW)
linux:ifconfig
dos:ipconfig
每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由
点分十进制形式
,如192.168.2.222,最后都会转换为一个32位的无符号整数。
in_addr_t inet_addr(const char *cp);
char *inet_ntoa(struct in_addr in);
一般是将accept填充的有关client的信息的结构体中提取IP并显示。
为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别
一般使用 6666 7777 8888 9999 10000 10001 10002
小端序(little-endian) - 低序字节存储在低地址
大端序(big-endian)- 高序字节存储在低地址
如何测试主机字节序:
网络中传输的数据必须按网络字节序,即大端字节序
将主机字节序转化为网络字节序
htonl(uint32_t hostlong);
htons(uint16_t hostshort);
将网络字节序转化为主机字节序
ntohl(uint32_t netlong);
ntohs(uint16_t netshort);
ctags工具测创建和使用
vim -t xxx 在系统内核当中查找xxx
ctrl + ] 追代码(Ctrl+鼠标左键)
ctrl + t 返回上一层(Ctrl+鼠标右键)
流程
int socket(int domain, int type, int protocol);
AF_UNIX 本地通信
AF_INET 网络通信
SOCK_STREAM 流式套接字
TCP
SOCK_DGRAM 数据报套接字
UDP
protocol:协议,通常为0
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
文件描述符,socket的返回值
一般使用:sockaddr_in
sin_family;
//地址族 AF_INET 2个字节
sin_port
; 端口号 2个字节
sin_addr;
s_addr
; ip地址 4个字节
struct sockaddr_in serveraddr;
serveraddr.sin_family
= AF_INET;
serveraddr.sin_port
= htons(9999);
serveraddr.sin_addr.s_addr
= inet_addr("192.168.2.189");
if(bind(sockfd,
(struct sockaddr *)&serveraddr
, sizeof(struct sockaddr)) < 0)
int listen(int sockfd, int backlog);
sockfd:文件描述符,socket的返回值
backlog:允许同时响应客户端请求的个数,一般设置为5,10
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
网络信息结构体(自动填充的客户端的网络信息结构体)
struct sockaddr_in clientaddr;
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
服务器的网络信息结构体(需要自己填充)
if(connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0)
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
服务器:accept的返回值(用于向客户端发送)
)
0 阻塞
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
服务器:accept的返回值
0 阻塞
发送端异常退出或者关闭文件描述符
linux网络编程(一)的更多相关文章
- 【深入浅出Linux网络编程】 "开篇 -- 知其然,知其所以然"
[深入浅出Linux网络编程]是一个连载博客,内容源于本人的工作经验,旨在给读者提供靠谱高效的学习途径,不必在零散的互联网资源中浪费精力,快速的掌握Linux网络编程. 连载包含4篇,会陆续编写发出, ...
- 【linux草鞋应用编程系列】_5_ Linux网络编程
一.网络通信简介 第一部分内容,暂时没法描述,内容实在太多,待后续专门的系列文章. 二.linux网络通信 在linux中继承了Unix下“一切皆文件”的思想, 在linux中要实现网 ...
- Linux 网络编程(IO模型)
针对linux 操作系统的5类IO模型,阻塞式.非阻塞式.多路复用.信号驱动和异步IO进行整理,参考<linux网络编程>及相关网络资料. 阻塞模式 在socket编程(如下图)中调用如下 ...
- linux网络编程 no route to host 解决方案
linux网络编程 no route to host 解决方案 [整合资料] (2013-05-13 21:38:12) 转载▼ 标签: net iptables it 分类: Linux 参考资料h ...
- linux网络编程-(socket套接字编程UDP传输)
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
- Linux网络编程&内核学习
c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: ...
- linux网络编程_1
本文属于转载,稍有改动,以利于学习. (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个 ...
- Linux网络编程入门 (转载)
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
- Linux网络编程必看书籍推荐
首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...
- [转] - Linux网络编程 -- 网络知识介绍
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
随机推荐
- ;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk
;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk ;~ 此脚本用于测试执行一行或多行AHK脚本源代码的效果;~ 此脚本最后修改于2019年9月22日20时03分;~ 把此 ...
- MySQL Shell import_table数据导入
目录 1. import_table介绍 2. Load Data 与 import table功能示例 2.1 用Load Data方式导入数据 2.2 用import_table方式导入数据 3. ...
- kms激活windows或者office
激活windows和office windows激活密钥 Windows 10 Professional(专业版):W269N-WFGWX-YVC9B-4J6C9-T83GX Windows 10 P ...
- 自学linux——16.LAMP项目上线流程
LAMP项目上线流程 一.编译安装与卸载Nginx(web服务器软件,类似于Apache) 1.安装nginx ① 下载nginx 网页下载https://nginx.org/en/downlo ...
- 在Mac上安装Istio并使用,有丰富的监控Kiali、Grafana、Jaeger
我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 简介 之前在文章<服务网格Istio入门-详细记录Kubernetes安装Istio并使用 ...
- 聊聊 PC 端自动化最佳方案 - WinAppDriver
1. 前言 大家好,我是安果! 一提到自动化,可能大家想到的是 App 端的 Appium.Airtest.AutoJS,亦或是 Selenium.Puppeteer.Cypress 等 Web 端的 ...
- RHCE_DAY07
文件共享服务FTP介绍 FTP(File Transfet Protocol):文件传输协议 FTP是一种在互联网中基于TCP协议端到端的数据传输协议 基于C/S架构,默认使用20.21号端口 端口2 ...
- HCIA-数据链路层
数据链路层 1.数据的差错检测 |FCS| 2.组帧|解帧 |数据帧帧头 帧尾| 3.标识身份 |MAC地址| 以太网络标准数据链路层的标准 数据链路层不仅仅只有以太网 地域来进行分类 局域网:小型地 ...
- 4、关于numpy.random.seed()的使用说明
定义:seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差 ...
- SpringMVC学习07(Ajax)
7.Ajax研究 7.1 简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是一种在无需重新加载整个网页的情况 ...