0부터 시작하는 네트워크 공부 - TCP 프로토콜

1. TCP 프로토콜
- TCP란? Transmisson Control Protocol로 프로그램 간에 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있게 하는 프로토콜이다

- 출발지, 도착지 포트
- TCP Flags : Data 통신 상태 응답
2. TCP 전송 과정
2.1 연결 수립 과정
- TCP를 이용한 데이터 통신을 할 때 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행되는 과정
- 클라이언트가 서버에게 요청 패킷을 보냄
- 서버가 클라이언트의 요청을 받아들이는 패킷을 보냄
- 클라이언트는 이를 최종적으로 수락하는 패킷을 보냄
- 보내는 ACK는 받은 SEQ + 1, SEQ는 받은 ACK, SEQ를 처음 보낼때는 랜덤한 값으로 보냄
- 자세한 3way handshake와 4way handshake 내용은 밑에 링크 참조
2.2 데이터 송수신 과정
- TCP를 이용해 Data 송수신 할 때 단순히 TCP 패킷만을 캡슐화해서 통신 하는 것이 아닌 PAYLOAD를 포함한 패킷을 주고 받을 때의 규칙

- 송신 쪽에서 또 보낼 때 SEQ, ACK 번호는 동일
- 수신 쪽에서 받은 ACK 번호는 보내는 SEQ 번호가 된다
- 보내는 Data가 있을시 보내는 ACK 번호는 받은 SEQ 번호 + Data의 크기
3. TCP 상태전이도

- 서버는 수동, 클라이언트는 능동
- 점선이 서버, 실선이 클라이언트
- ESTABLISHED : 연결이 된 상태, 이 상태가 되야 Data 전송이 가능하다
- LISTENING : 서버가 요청을 기다리는 상태
- 즉, LISTENING -> SYN_SENT, SYN_RECEIVED -> ESTABLISHED
- 실선과 점선 각각 따라가며 파악해보기
4. 실습
- APACHE : APACHE24를 통해 자신의 IP를 웹에서 접속할 수 있게 배포
- 0.0.0.0 : 모든 ip, 이 ip에 포함된 주소로 찾아와야지만 내 컴퓨터에 접속 가능
- 127.0.0.1 : 나 자신을 나타내는 ip


- PID : 실행중인 프로세스 ID
- HTTPd 포트와 해당 PID 확인 가능, HTTP의 포트 번호는 80이고 APACHE HTTPd의 pid는 5080
- 상태가 LISTENING이여야 통신 가능

- 본 컴퓨터에서 가상 IP로 접속시 19.1과 연결되는 이유는 19.1은 가상 머신에서 게이트웨이 주소를 통해 가상 공유기와 연결하면, 그 가상 공유기가 VM net 8과 연결 시키는데 이 장치의 IP 주소가 1이다
- APACHE를 이용해 HTTPD를 실행했기에 PID가 5080이다
- 외부에서 내부 사설 ip가 apache를 통해 http 프로토콜로 배포한 곳에 접속했기에 80번 포트에 접속한 것이다. 외부 cmd상에서는 19.3:80에 접속했다고 나온다.

5. VM net 8

- VM net 8을 연결하면 가상 환경에 게이트웨이가 생겨 인터넷과 접속이 가능하다.
- 즉, 본 컴퓨터에서 가상 환경의 사설 IP에 접속하면 VM net 8과 연결되기에 NAT를 통해 외부 IP가 1로 출력된다.
- VM net 8 이 NAT 라면 가상의 Gateway에서 NAT를 해준다