20140618 (3 Hand shake, 4 way Hand shake, 프로세스)
83일차
------------------
Network 이론
------------------
--- 3 Hand Shake
다시 요약하면
1. Seq 수를 random으로 생성,
SYN Flag set하고 보냄.
2. Ack를 Seq + 1로 하고,
Seq를 random으로 생성,
SYN, ACK Flag set하여 보냄.
3. Ack를 Seq + 1로 하고,
Seq를 Ack로 하고,
ACK Flag set하여 보냄.
문제점.
- 서로 보낸 Seq, Ack 번호가 다를 경우 뭔가 잘못되었기 때문에 통신이 이루어지지 않는다.
- client가 1번만 보내고 대기하게 되면 서버는 몇 초간 대기한다.
엄청나게 많은 1번이 오면 서버가 멈춘다.
(AF_RAW 옵션으로 ip spoofing으로 DOS 공격이 이런 경우이다.)
--- 4 way Hand Shake
3 hand shake는 TCP 통신을 시작할 때 절차이고,
4 way hand shake는 TCP 통신을 종료할 때 절차이다.
-------------
프로세스
-------------
--- 실행중에 있는 프로그램을 프로세스(Process)라고 부른다
Windows 경우 작업관리자
Linux 경우 ps 명령어로
현재 실행 중인 프로세스 리스트를 볼 수 있다.
--- fork
자식 프로세스를 생성한다.
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
리턴값
성공시
부모 프로세스 : 자식 프로세스의 프로세스 ID
자식 프로세스 : 0
실패시
-1
예제)
One 이 한 번 출력되고 Two가 두번 출력되었다.
9번 줄에 fork()함수가 호출되면서 프로세스가 두 개가 되었다.
그래서 그 아래 소스는 두번씩 실행된다.
--- getpid, getppid
getpid 는 자신의 PID
getppid 는 부모 프로세스의 PID를 얻음.
#include <unistd.h
pid_t getpid(void);
pid_t getppid(void);
리턴값
성공시
PID
실패시
발생하지 않음
--- vfork
fork와 유사한데 다른점은 자식이 끝내기 전에 부모는 실행을 멈춘다.
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void);
리턴값
성공시
부모 프로세스 : 자식 프로세스의 프로세스 ID
자식 프로세스 : 0
실패시
-1
예제)