멀티플렉싱
여러 가지 서비스에 하나의 IP 주소를 통해 사용하여 트래픽을 보낼 수 있는 것
디멀티플렉싱
수신 측에서도 IP 주소 하나에 온 여러 요청을 각각에 맞는 수신 서비스로 전달하는 것
port
같은 IP 주소에서 서비스를 달리 사용하기 위해 사용되는 16비트 숫자
IP 주소 뒤에 : 을 붙이고 port 를 표기함
TCP 세그먼트
TCP 헤더와 데이터 섹션으로 구성됨
데이터 섹션은 애플리케이션 계층의 데이터를 포함하는 페이로드 영역임
TCP 헤더
Source port: 많은 발신 연결을 분리하기 위해 임시 발신 포트를 사용함. 요청을 보내는 쪽에서도 웹 브라우저가 요청했으면 웹 브라우저 서비스가 수신해야 하기 때문에 임시로 발신 포트를 발급하여 특정 서비스에서 응답을 받을 수 있도록 함
Destination port: 멀티플렉싱이 가능하도록 포트를 통해 어떤 서비스에 접근할 지 선택함
Sequence number: 이더넷 페이로드에는 크기가 1518 바이트로 제한되어 있음. 따라서 TCP는 데이터를 여러 세그먼트로 나누어 사용하는데, 많은 세그먼트 중 어떤 세그먼트인지를 나타내기 위해 이 필드가 사용됨.
Acknowledgement number: 다음으로 예상되는 시퀀스 번호를 나타냄
Header Length: 헤더의 크기를 나타내어 실제 페이로드는 어디부터인지 알아내기 위해 사용됨
control flags: TCP 제어 플래그를 나타내는 6개의 비트
Window: 한 번에 수신할 수 있는 데이터의 크기. 수신 측이 데이터를 받을 수 있는 한에서 보내서 네트워크 과부하를 줄임
checksum: TCP 헤더와 데이터 섹션을 체크섬 함수에 넣어 값을 얻고 수신 측에서도 동일한 연산을 거쳐 값이 같은지 비교하여 데이터 전송이 잘 이루어졌는지 확인함
Urgent pointer: TCP 제어 플래그와 같이 사용되며, 더 중요한 특정 세그먼트를 가리킴. 최신 네트워크에서 사용되지는 않음
Options: 현실에서 거의 사용되지 않음. 더 복잡한 흐름 제어 프로토콜을 위해 사용됨
Padding: 페이로드 섹션의 시작점을 맞추기 위해 0으로 채워진 부분
TCP 제어 플래그
6개의 비트가 각각의 플래그를 나타낸다.
URG(urgent): 값이 1이면 세그먼트가 긴급한 것으로 간주된다. urgent pointer 필드에 이에 대한 추가 정보가 있음을 나타낸다. 일반적으로 사용되지 않는다.
ACK(acknowledged): 이 값이 1이면 Acknowledgement number 필드를 검사해야 함을 의미한다.
PSH(push): TCP 송수신에는 다량의 데이터를 효율적으로 처리하기 위한 버퍼가 존재한다. 적은 양의 데이터를 즉시 보낼 필요가 있을 때는 이 값을 1로 하여 버퍼에 두지 말고 가능한 빨리 보내라는 의미를 나타낸다.
RST(reset): 이 값이 1이면 누락되거나 잘못된 세그먼트를 제대로 복구하지 못했음을 나타낸다. 세그먼트들을 복구할 수 없으니 다시 리셋하고 보내달라는 의미로 사용된다.
SYN(synchronize): TCP 커넥션이 처음 맺어졌을때 수신 측에서 Sequence number 필드를 검사하도록 하기 위해 사용된다.
FIN(finish): 이 값이 1이면 더 이상 전송할 데이터가 없어 TCP 연결을 종료하겠다는 의미를 나타낸다.
TCP 3-way handshaking
송신 컴퓨터는 수신 컴퓨터로 SYN 플래그를 설정하여 전송한다.
수신 컴퓨터는 송신 컴퓨터로 SYN, ACK 플래그를 설정하여 전송한다.
송신 컴퓨터는 수신 컴퓨터로 ACK 플래그를 설정하여 전송한다.
handshaking 이란 두 디바이스가 서로가 말하는 방식(프로토콜)을 맞추고 서로 이해할 수 있도록 하기 위한 방법이다.
핸드셰이킹이 끝나면 TCP 연결이 맺어지며 데이터를 전송할 수 있고, 전이중으로 작동한다.
TCP 4-way handshaking
연결을 종료하고자 하는 컴퓨터가 상대방에게 FIN 플래그를 설정해 전송한다.
상대방은 ACK로 연결 종료를 받아들인다.
상대방은 자신도 종료할 준비가 되면 FIN 플래그를 설정해 전송한다.
먼저 종료하고자 했던 컴퓨터도 ACK로 연결 종료를 받아들인다.
연결 종료 시 발생하는 핸드셰이킹이다.
2번과 3번 과정이 연속적으로 진행되지 않아 한쪽의 커넥션은 열린 상태로 유지될 수 있지만 자주 발생하는 문제는 아니다.
TCP 소켓
잠재적인 TCP 연결에서 엔드포인트를 인스턴스화 하는것이다. 인스턴스화란 실제 어떤 프로그램이 구현하여 해당 TCP 연결을 수립하게 되는 것을 의미한다.
TCP 전송은 목적지 포트 번호를 포함하는데, 목적지 디바이스에 해당 포트에서 소켓을 열어야만 TCP 요청을 받을 수 있다.
TCP 소켓 상태
LISTEN
TCP 소켓이 들어오는 연결을 수신할 준비가 되어 있는 상태를 의미함
서버 측에서만 볼 수 있음
SYN_SENT
SYN 요청을 보냈지만 아직 TCP 연결이 수립되지는 않은 상태를 의미함
클라이언트 측에서만 볼 수 있음
SYN_RECEIVED
SYN 요청을 수신하여 SYN/ACK 요청을 보냈지만 아직 최종 ACK 응답을 받지 못한 상태를 의미함
서버 측에서만 볼 수 있음
ESTABLISHED
TCP 연결이 수립되어 데이터를 교환할 수 있는 상태를 의미함
클라이언트, 서버 측 모두에서 볼 수 있음
FIN_WAIT
FIN이 전송되었지만 상대방에게 ACK를 받지 못한 상태를 의미함
CLOSE_WAIT
TCP 연결은 닫혔지만 애플리케이션에서 소켓을 아직 종료하지 않은 상태를 의미함
CLOSED
TCP 연결이 완전히 종료되어 더 이상 통신이 불가능한 상태
connection-oriented protocol
TCP와 같이 연결을 설정하고 모든 데이터가 제대로 전송되었는지 확인하는 프로토콜
모든 데이터가 제대로 전송되었다는 것은 송신 측에서의 모든 비트가 그대로 수신 측에 전달되었다는 것을 의미한다.
다양한 이유로 전송이 끊기거나 중간에 데이터가 유실될 수 있는데, IP, 이더넷 프로토콜은 체크섬을 통해 단순히 삭제할 수만 있다.
TCP 는 이러한 데이터를 재전송하여 데이터를 제대로 전송할 수 있도록 제어한다.
Acknowledgement number 를 통해 어디까지 수신했는지 정확히 알 수 있기 때문에 세그먼트를 재전송할 지 결정할 수 있다.
connection-less protocol
UDP와 같이 별도의 연결 없이 데이터를 전송하는 프로토콜
TCP는 데이터 전송을 신뢰할 수 있지만 연결을 맺고 끊는 과정에 오버헤드가 있음
UDP는 연결이 없으며 ACK와 같이 확인하는 과정 없이 패킷을 전송하기만 하여 훨씬 빠른 처리 성능을 보임
방화벽
특정 기준을 충족하는 트래픽을 차단하는 장치
네트워크 보안을 위해 사용됨
네트워크의 다양한 계층에서 사용될 수 있음. 가장 일반적으로 사용되는 계층은 전송 계층임
전송 계층 방화벽은 특정 포트에 대한 트래픽을 차단하고, 다른 포트로의 트래픽은 허용하는 구성이 있음
방화벽은 실행할 수 있는 프로그램이라고 이해할 수 있으며, 별도의 디바이스에서 수행되기도 하고 라우터와 같은 다른 디바이스에 붙어서 수행되기도 함