|
课程目录6 g3 Z+ l0 g+ R' Y- E3 ?2 L
Linux网络编程之TCP/IP基础篇" t" K2 e2 h6 o' E% Z' I7 w
01TCPIP基础(一)
1 P# i+ {, @/ x( b& iISO/OSI参考模型
: ~# P( Z; t' L$ c7 |$ S. q+ hTCP/IP四层模型+ q# Y3 e' R J! [' [, p3 h
基本概念(对等通信、封装、分用、端口)0 o2 X' |9 ~% S
02TCPIP基础(二)* y/ e r2 P* H2 M; t6 K6 y
最大传输单元(MTU)/路径MTU
; B7 F" D) K! n' _; M以太网帧格式$ G# x Y4 ~ A/ k5 x$ Q+ C
ICMP) G/ ~( C, x. V! |! A1 C
ARP$ P2 |! l. x: }) h8 r
RARP
0 x7 X/ N8 l# X6 b' o
0 O' {+ C& z' S, D03TCPIP基础(三)/ A4 Z# \3 H* J% D. o
IP数据报格式
) d$ ]# X# J6 E% l网际校验和
2 s4 j( o! {8 G- O1 V* S路由
" e7 L% W6 x. \8 M$ Q" |8 M; F, F2 J7 U) E/ Q$ s& ~$ i
04TCPIP基础(四)* b4 I/ Z1 O7 o
TCP特点7 N( k: ~+ M$ N' }2 V
TCP报文格式
$ U# T! k1 a7 T" J6 z- K) B连接建立三次握手
* C5 j( q: h8 G$ W: `连接终止四次握手6 u6 g X( b: d @& V8 b2 r
TCP如何保证可靠性
9 B8 y/ c6 p. b# e0 X3 y } u* U! }
( { t) t; B" _0 _3 l. t05TCPIP基础(五): E0 p4 ]/ H, L
滑动窗口协议
9 a+ E6 u$ p4 L/ g( C6 Q/ m6 XUDP特点
. [1 i. Y' P9 L1 j7 CUDP报文格式
& U4 K" D2 \: L. n1 x: h1 K
/ R9 `/ m1 C/ R% ?7 c; _Linux网络编程之socket编程篇
5 D8 h1 h3 \& U+ H2 s06socket编程(一)( m; D+ W* R) ?% y! f
什么是socket0 Z$ ~; O+ ]" Z0 P2 c+ U
IPv4套接口地址结构
7 _$ ~" d' ?# I9 W( {, a网络字节序' C# V+ Z+ @" j7 b: M1 n& _
字节序转换函数! h) n" R: v! w
地址转换函数
" p/ C8 [3 z! r6 h' h: ]套接字类型
; A( q9 _4 F8 m5 v
& S5 ~* K, k; X- | W+ Q+ i07socket编程(二)1 c* Z B3 y" j/ Z2 _
TCP客户/服务器模型
* ?9 _4 n1 M# D( M2 x, C回射客户/服务器; `4 N B+ |( X# k. ~& N# a
socket、bind、listen、accept、connect/ V# a, s" V9 W6 U5 \: t
# Q6 B5 J# X9 ^. T
08socket编程(三)
% L5 p. m" |7 ^1 {8 Z! x* {SO_REUSEADDR4 K4 m9 X7 f2 _) n( e+ m1 L0 L& X
处理多客户连接(process-per-conection)
) f: X2 F8 f, A2 U8 V) m点对点聊天程序实现
9 J, o" g' w( j& F( B' x) m$ g, ~- p8 Q9 L
09socket编程(四)
, G8 n6 r* O3 h2 H流协议与粘包9 O- d' @+ a+ U9 u
粘包产生的原因
X$ D) t6 I* G粘包处理方案6 }, @/ X6 {" y) t1 D
readn writen! T( x$ o% h1 a
回射客户/服务器
0 [; B* m5 v5 Q6 h7 G z& E0 X$ n
9 O" w+ V8 {4 U; W% y8 p3 v! L1 J+ F10socket编程(五)
) K& _1 g$ N% |# Nread、write与recv、send
) K2 L" A7 ?7 E& i" Ureadline实现1 X8 s# F/ l8 h/ q
用readline实现回射客户/服务器
. V9 c; z1 V* b# x% ~$ xgetsockname、getpeername
: x. `9 V- K- i W* rgethostname、gethostbyname、gethostbyaddr' ^0 c w7 n5 Q9 A. N
7 b4 B* `$ ?' R# P2 l" c! _
11socket编程(六)/ a! [. l' f/ W( w
TCP回射客户/服务器
5 p$ `! M8 ?! K+ G5 D2 c8 l1 g1 fTCP是个流协议" S0 Q# [0 B! \) c/ r) N* Y- w
僵进程与SIGCHLD信号
6 @+ v+ u4 H9 Z$ T# {! F5 {9 ?6 e8 F0 d9 {, m5 [# N
12socket编程(七)" O0 R" _* W1 g P9 h4 D# w7 \
TCP 11种状态
# p2 e R" Z4 M' g) X$ {连接建立三次握手、连接终止四次握手5 g0 w6 A, j1 H) n
TIME_WAIT与SO_REUSEADDR5 i" q9 f; [6 V; C S
SIGPIPE
6 N9 v. l# g2 N3 n. Z: z0 M7 U( J7 K4 w% X. }* ^
13socket编程(八)
: }0 x2 G" J0 Q5 [/ D2 R! T% W五种I/O模型& n( }( @6 G" ] e8 f2 k
select
* o: Y% |5 H/ D; U% E用select改进回射客户端程序8 }( X& I+ y2 {
$ D- f" F" A# T+ a
14socket编程(九)
6 \8 |, u; o9 N8 [select
3 @9 o) M1 `+ F- o* d# H+ s读、写、异常事件发生条件
$ X7 w) g3 t2 c* X6 _, g6 ]用select改进回射服务器程序. [2 r& I$ U p7 ^* T- a& u& ^
! V& x$ b% }9 R, f- h15socket编程(十)/ u5 A0 z- t+ r# _. U
用select改进第八章点对点聊天程序& L. T$ R) P( K2 e! G! B
9 Y- p$ w) T2 u t* S- X, H
16socket编程(十一)
1 `- W# u; w9 l4 J1 a套接字I/O超时设置方法
+ [6 ?2 i0 t' d& I7 Y5 |4 ^用select实现超时: d8 _- Y0 J0 a$ Q- \
read_timeout函数封装
. ~& [) f; c: rwrite_timeout函数封装
7 U! w% @+ w0 i4 e. b, uaccept_timeout函数封装! ?; S0 K( Z' f( x: S
connect_timeout函数封装9 {5 w' l+ }2 o& l, V! d) t1 H
# X$ S/ \# G$ N' W [, K17socket编程(十二)
$ S! [* A4 e1 F" A; Wselect限制
4 w8 N! v' S% U& y' Gpoll/ f+ Y; W+ L. N. M
7 k2 N K$ M# l% D! \8 |% g18socket编程(十三)
4 [. ^ y) d! Cepoll使用
9 A- a- `1 ]. n3 |epoll与select、poll区别2 @4 d; ?8 h) C/ P) m7 X! [0 U
epoll LT/ET模式. @3 Y' V# o7 W! A! Z- H
3 N T. r3 _: O3 r( {* g% j
19socket编程(十四)
* {/ @' D; X9 D1 I e+ u7 Z( DUDP特点
7 w2 n7 z9 T5 l5 w; o; HUDP客户/服务基本模型
- v* E' I) c" q1 ^UDP回射客户/服务器* K: \2 G; m D L
UDP注意点" I( w. ~. X" b0 f7 v/ {7 s
0 @1 L$ O' g, I& f, b+ }20socket编程(十五)3 T1 m' L( y& M# E
udp聊天室实现' o! O# v/ c, z
* Q4 N$ t9 s8 s; t* T5 s21socket编程(十六)
/ n6 G2 l9 t& cUNIX域协议特点/ K# ~; Z2 o: f2 e0 d- ?
UNIX域地址结构
9 _3 t, q4 P# k7 NUNIX域字节流回射客户/服务* [# U# D- G9 O; y# J, G% O
UNIX域套接字编程注意点' o. u) S& W% Z" \
/ x, O/ f8 q, f) n( ^2 m$ ~
22socket编程(十七)
- x$ I: o2 l. P7 d' msocketpair" v0 X* U/ u% O' r9 z7 \6 a
sendmsg/recvmsg
6 }3 t) \1 h6 \: ZUNIX域套接字传递描述符字. x/ I7 q& c3 x& k% i
Linux网络编程之进程间通信篇0 g3 m' R+ e. P* g l& j' w
) m# t4 T2 ^3 {: s6 s23进程间通信介绍(一)3 |) \. r: Z& a9 l" G' K9 d1 P/ Q- B
进程同步与进程互斥6 B% z0 L+ g4 }. K5 D
进程间通信目的
2 y$ _. r7 I0 N# B' O, @9 c进程间通信发展( O$ w% c/ ]; F- t( o
进程间通信分类- ^" u; M1 { L; c
进程间共享信息的三种方式
1 F) J; s8 X9 B( U+ H; ]6 BIPC对象的持续性4 |: S9 a7 v7 U1 J) q- `% c3 D
, v( h- t* d2 D2 u& f' M9 `
24进程间通信介绍(二)9 P' g- D/ Q5 M: {4 c1 |
死锁" `" m1 Z* j' {" X5 Y2 s
信号量
5 x3 B% m$ h3 Z& Z/ \+ [; o XPV原语
+ H% ]+ h, ^7 Y9 I' P# p用PV原语解决司机与售票员问题
6 B3 f& B7 X3 ^- u+ `用PV原语解决民航售票问题
0 Y( Z+ e, p5 x9 `4 q; p用PV原语解决汽车租赁问题
6 j! B+ v9 O0 W: \/ J& f: H8 B, g% \/ \! s' d& @/ y' h
25System V消息队列(一)
+ v+ w' D. }3 ^; h" Z% x消息队列" t; ?2 ]' z* p) m0 `( j& b% C9 p
IPC对象数据结构
6 z Y4 z$ Z8 S消息队列结构3 N5 V4 _) s0 \ m9 Y' s' ~ [ l
消息队列在内核中的表示2 _0 r0 s& w; r
消息队列函数9 f: a: `* }9 g9 r$ e6 `1 w# ^
9 |* Z* E6 W% Y& k! q
26System V消息队列(二)5 {% |5 Y* S* }' C
msgsnd函数
+ ^6 a6 r* i9 A y5 jmsgrcv函数6 I( B2 K0 d: ]( C1 h
4 _4 A6 b$ k \- y* m \27System V消息队列(三)/ d& J, S( w/ U7 ]/ I2 N
消息队列实现回射客户/服务器
7 I* m2 N' ^/ p- P8 z% L
! ]! O* R: _, r$ w28共享内存介绍
( d4 e( r: g) `共享内存
' N0 _, `6 U) f+ [3 m% f4 B共享内存示意图
# a8 F# S8 C3 o f管道、消息队列与共享内存传递数据对比
5 Y5 }' i- f7 a, b0 E* ]mmap函数; J& E& I9 {& v- h2 o4 }! }
munmap函数* l+ n3 k3 U( I0 T$ V
msync函数
+ \, u% i1 X5 [0 j) b- X& }1 ~& F+ \7 ^
29System V共享内存! P+ N; {- _( I3 A
共享内存数据结构
; i% g4 Z; M/ P# v共享内存函数& F7 V% J9 n3 A* g1 y
共享内存示例6 B$ q5 q/ e! _# \0 w* S
, ~' l0 o# a" G- K- P, ~( X M
30System V信号量(一): X5 R' h* m1 H" B. G0 N
信号量
+ k2 \0 i, K) H& ^2 H/ i9 I u3 [信号量集结构7 E% F( P- m- j6 g7 s& b5 c* x
信号量集函数2 y; A3 i# @: Z+ i$ g8 Y5 R
信号量示例
6 k! G% K8 {. ], _/ {2 p6 i9 t+ W( [+ t0 J0 u+ ~' m
31System V信号量(二)% E: H( u# X4 {; B. e0 X" z7 e7 O
用信号量实现进程互斥示例1 P. \8 b( D9 h6 P. X2 |% K9 T
* b& l. y1 r" p3 f0 H32System V信号量(三)
1 @7 k0 L f9 A0 o( m% H. o用信号集解决哲学家就餐问题
' S, Q& I, y: [
/ _" G$ [5 o) o. v1 [33System V共享内存与信号量综合
# g9 H# K3 ]( u# H7 Y; q用信号量解决生产者消费者问题
9 M2 G m) d/ n% T5 D, i; `实现shmfifo! Q# @" V1 k2 S0 i# K* m! o% z
8 N, q. X, S3 _ h) K5 @
34POSIX消息队列' x: R, S4 w1 H3 I) f/ ~" E! ~6 j
POSIX消息队列相关函数* Z; B) I, c4 Y( f0 k
POSIX消息队列示例
$ W8 t0 W: F7 `! F: e35POSIX共享内存
/ f e6 D/ \) x: jPOSIX共享内存相关函数
0 H8 b7 \0 C7 M$ R8 `, zPOSIX共享内存示例
3 V' L2 G! _4 e k& BLinux网络编程之线程篇
6 U" y% F k4 A3 d; C E& M
6 B M: R; k* U& r2 l36线程介绍0 y# _: C) }$ ^
什么是线程
' n) ` B+ r. a进程与线程( Y5 g- N7 P. v! q0 @2 P& Z0 o# _1 k
线程优缺点* `8 A r& ~/ {8 X
线程模型5 s. I3 e7 x1 ]! W
N:1用户线程模型! [- Q, t* F0 n" s
1:1核心线程模型8 z: S: y+ [( b' c( H
N:M混合线程模型0 E p1 l" N: o
0 P; m ?, p. X$ B# P
37POSIX线程(一), H" A# h+ R4 b R7 l
POSIX线程库相关函数* W& C1 m% M& n% r2 b
用线程实现回射客户/服务器! N2 C: H; a0 {" y+ d
n' x" ~' U! Z. Q2 D# b38POSIX线程(二), _5 M# B' B8 N7 x3 _+ W9 |
线程属性6 y+ z% d; l! u! e: ?
线程特定数据
, y! y( o7 i7 ~% b' V- o
( ^! \' K; j: r9 S# v# f+ n, g/ W( Y39POSIX信号量与互斥锁
( d% m% V0 v3 @ x+ ^POSIX信号量相关函数( `9 y6 Y: N/ o0 C6 h4 _
POSIX互斥锁相关函数
@# h' j8 v- K: _3 k生产者消费者问题
4 a3 Q4 o# x& \) H; x" c/ c自旋锁与读写锁介绍
2 g" A3 H3 z9 T* ^, C* |! I$ k% o6 Q5 b( r' J: F
40POSIX条件变量
& `' m- e7 J' K7 x, r条件变量0 J3 M- I" b. j' ?' L/ w6 z
条件变量函数/ m5 C* w: h+ {4 I
条件变量使用规范2 ~2 x2 T7 J1 [: M C8 b
使用条件变量解决生产者消费者问题9 s, { V; Y3 s9 E7 f
% m7 }% D6 `" }1 H! Z! q& o N" p8 C41一个简单的线程池实现
- b" k1 {# ]+ _3 N线程池性能分析# F) y" ^4 O$ q- l$ g. q J" @0 k
线程池实现) O& `; \' i3 ~: Z4 X6 F5 {
* }9 Q% w4 r7 Z1 [( N6 i8 b* r$ D/ M o1 i. Z7 y
" |8 x( Q4 h( b7 `
4 U9 Z$ }' ?+ i8 n( N$ S5 [' p5 y# q |
|