网络编程(一)

本文详细介绍了TCP/IP网络体系结构的基本概念,包括各层的功能、常用协议如TCP和UDP的特点,以及网络编程中的关键知识点如套接字编程、IP地址和端口的作用等。

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

网络体系结构

TCP/IP网络体系结构:

描述的是消息发出去的一种过程,应用程序如何收到消息,发送到内核中,通过网卡传输到网线上


1.应用层
HTTP FTP
  
  传输层  最重要的数据:端口(区分不同服务标识PC机上运行的指定协议) 2字节(2Bytes) 16字节(16bits) 2^16 = 0~65535
TCP:有链接,可靠(保证对方收到)
难点:接收方自行区分消息包(TCP消息为 无字节流,一长串数据),如何区分粘包
UDP:无连接,不保证可靠,无发送缓冲区,有接收缓冲区

拓展:QQ使用的传输协议?
登录时,TCP协议,发消息使用UDP协议
用户端1-->Tencent Server-->用户端2
需要经过腾讯服务器(监管,保证数据健康性)

而快播当时采用的是用户端直接与用户端通信的方式,不经过服务器
 
 网络层:最重要的数据是IP地址  标识自己

IP地址分类:A B C D E
IP ospf等
IPV4:Internetworking Protocol Version 4 网络之间互联的协议
4字节(4Bytes) = 32位(32bits) = 2^32
IPV6:16字节 = 128位
  
  数据链路层:最重要的数据是网卡的MAC地址
MAC地址:网卡硬件地址、网卡物理地址
注意的是:不是全球唯一的、但是同一个网段要求MAC地址唯一。
ARP协议:把IP地址转换成MAC地址
RARP协议:把MAC地址转换成IP地址
以太网属于链路层协议


数据封装与传递:发送数据每经过一层都需要加上对应的报头,接收方每解析一层,去掉相应的报头发送数据每经过一层都需要加上对应的报头,接收方每解析一层,去掉相应的报头
IP header:20字节
TCP header:20字节
UDP header:8字节
业务层的角度:网络编程也叫套接字编程


2. 网络体系结构的概念?每一个分为几层?
引入:数据传输的过程模拟成寄快递的过程

描述用户数据通过应用程序到内核,内核到网卡,再到网线这么一个传输过程
OSI:open system interconnect 开放系统互联模型
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP协议族体系结构:
应用层、传输层、网络层、数据链路层、物理层


3. 掌握大端字节序和小端字节序,以及写代码判断

4. 掌握简单的tcp服务器
TCP/IP网络编程预备知识:
4.1.Socket
通用的网络编程接口,特殊的文件描述符
普通的IO操作

类型:
a.流式套接字(SOCK_STREAM) --------TCP协议
每个流式套接字都有自己的发送缓冲区与接收缓冲区
b.数据报套接字(SOCK_DGRAM)--------UDP协议
c.原始套接字(SOCK_RAW)  ----------ping命令(跨越传输层)

4.2.IP地址

分类:
版本:
子网掩码:

IP地址转换:
人类看的:点分十进制IP地址
计算机识别:32位网络字节序二进制形式
e.g.   192.168.0.2
192<<24 + 168<<16 + 0<8 + 2
系统调用函数:
inet_aton()
inet_addr()
inet_ntoa()

4.3.端口号(区分不同服务)

4.4.字节序
主机字节序:
1.大端序:
2.小端序:

网络字节序:大端字节序(网络发送时使用)
使用统一字节序,避免兼容性问题
应用进程将整数送入socket前,需要转化成网络字节序
应用进程从socket取出整数后,需要转化成小端字节序


5. 使用telnet命令模拟客户端
查看端口是否被用:lsof -i :端口号
查看服务及固定端口:vi   /etc/services
使用方法:telnet ip地址 端口
退出telnet  :ctrl键+] ,然后quit就退出了


练习

1:写程序判断大小端:定义一个整数,定义一个字符指针指向这个整数,再进行判断

2:与10.110.12.29,子网掩码为255.255.255.224处于同一网段的是()

A 10.110.12.0
B 10.110.12.30
C 10.110.12.31
d 10.110.12.32

子网掩码:255.255.255.224
11111111  11111111 11111111 11100000
子网号: 10.110.12.29
&  00001010  01101110 00001100 00011101
= 00001010  01101110 00001100 00000000
10.110.12. 0
只考虑点分十进制IP地址最后8位
最后一位为0,广播?
 1:网关
 255:?
Netmask: 11100000
& 选项B 30 :00011110  = 0
&   选项C 31 :00011111  = 0
&   选项D 32 :00100000  =00100000 (不符合)

3:服务器收到ls命令,将当前目录下的目录项发送给客户端
如果不是ls命令,则将字符串回显

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值