UDP checksum
체크섬은 데이터가 손상되었는지를 수신자 측에서 확인하기 위해 데이터와 함께 세그먼트에 실어 보내는 값이다.
이를 이용한 확인 방법은 다음과 같다.
1. 체크섬이 16비트면 송신자는 보내려는 데이터를 16비트씩 쪼갠다.
2. 쪼갠 데이터를 순서대로 더한다. 이 값을 SUM이라고 한다.
3. SUM의 값에 1의 보수를 취하면 그 값이 CHECKSUM이다.
4. 세그먼트를 보낼 때 CHECKSUM을 UDP 세그먼트의 체크필드에 삽입하여 보낸다.
5. 수신자는 세그먼트를 수신 후 CHECKSUM을 포함한 모든 16비트 값을 더한다.
6. 그 값이 모두 1이면 에러가 없다. 하나라도 0이면 에러가 있다.
신뢰적 데이터 전송
rdt_send() : 응용 계층이 하위 rdt에 데이터를 전달하기 위해 취한 액션이다. rdt 입장에서는 이벤트가 발생한 것이다.
udt_send() : rdt가 비신뢰적인 하위 채널에 데이터를 전달하기 위해 취한 액션이다.
rdt_rcv() : 상위 rdt에 데이터를 전달하기 위해 취한액션이다. rdt 입장에서는 이벤트가 발생한 것이다.
deliver_data() : rdt가 상위 계층에 데이터를 전달하기 위해 취한 액션이다.
프로토콜은 이벤트를 받아 상태가 변하며 그에 따른 액션을 취하며 또 상태가 변한다.
● rdt 1.0: 신뢰적인 채널에서 rdt
하위 채널이 완전히 신뢰적이어서 비트 오류나 패킷 소실 등이 없는 경우를 상정한다.

sender tcp 통신과정
① 패킷을 전송하기 위해 APP가 data를 주기를 대기한다.
② 이벤트: APP가 data를 TCP에 전달했다.
액션 : 전달받은 data를 포함해서 sndpkt을 만들었다.
: sndpkt을 IP에 전달했다.
③ 패킷을 전송하기 위해 APP가 data를 주기를 대기하는 상으로 다시 돌아왔다.
receiver tcp 통신과정
① data를 전송하기 위해 IP가 패킷을 주기를 대기한다.
② 이벤트: IP가 패킷을 TCP에 전달했다.
액션 : 전달받은 패킷에서 data를 추출했다.
: data를 APP에 전달했다.
③ data를 전송하기 위해 IP가 패킷을 주기를 대기하는 상으로 다시 돌아왔다.
● rdt 2.0: 비트 오류가 있는 채널
체크섬을 통해 비트 에러를 감지한다.
수신측의 피드백이 필요하다.
- acknowledgement (ACKs) : 수신자가 송신자에게 패킷을 잘 받았다는 응답이다.
- negative acknowledgement (NAKs) : 수신자가 송신자에게 패킷에 에러 또는 장애가 있다는 응답이다.
송신자는 NAK인 경우 패킷을 재전송한다.
rdt 1.0에 비해 부가적으로 에러 검출, 수신자 피드백, 재전송의 프로토콜이 필요하다

sender tcp 통신과정
① 패킷을 전송하기 위해 APP가 data주기를 대기한다.
② 이벤트: APP가 data를 TCP에 전달했다.
액션 : 전달받은 data와 그 data의 checksum을 포함해서 sndpkt을 만들었다.
: sndpkt를 IP에 전달했다.
상이 ACK, NAK를 기다리는 상으로 변경되었다.
③ 이벤트: IP로부터 NAK패킷이 전달되었다.
액션 : sndpkt를 다시 IP에 전달했다.
④ 이벤트: IP로부터 ACK패킷이 전달되었다.
액션 : 별도의 액션은 없다.
패킷을 전송하기 위해 APP가 data를 주기를 대기하는 상으로 다시 돌아왔다.
receiver tcp 통신과정
① data를 전송하기 위해 IP가 패킷을 주기를 대기한다.
②이벤트: IP로부터 깨진 패킷이 전달되었다.
액션 : NAK패킷을 IP에 전달했다.
③ 이벤트: IP로부터 정상 패킷이 전달되었다.
액션 : 전달받은 패킷에서 data를 추출했다.
: data를 APP에 전달했다.
: ACK패킷을 IP에 전달했다.
data를 전송하기 위해 IP가 패킷을 주기를 대기하는 상으로 다시 돌아왔다.
● rdt 2.1: ACK/NAK 훼손, 중복 대응
송신자
- 패킷에 시퀀스 넘버를 추가한다. 단 두개의 번호만으로 충분하다.
- ACK/NAK의 손상을 검사한다.
- 상태가 rdt 2.0보다 두배 많다.
수신자
- 수신된 패킷의 중복 여부를 검사해야 한다. 시퀀스 넘버가 0인지 1인지 검사한다.
- 수신자는 송신자가 ACK/NAK를 정상적으로 수신했는지 알 수 없다.
+
- 수신자는 중복된 패킷을 버린다. (01.15 수정)

sender tcp 통신과정
① 0번 패킷을 전송하기 위해 APP가 data주기를 대기한다.
② 이벤트: APP가 data를 TCP에 전달했다.
액션 : 전달받은 data와 그 data의 checksum, 시퀀스 넘버 0을 포함해서 sndpkt을 만들었다.
: sndpkt를 IP에 전달했다.
상이 0번 패킷에 대한 ACK, NAK를 기다리는 상으로 변경되었다.
③ 이벤트: IP로부터 손상된 패킷 혹은 NAK패킷이 전달되었다.
액션 : sndpkt를 다시 IP에 전달했다.
상이 0번 패킷에 대한 ACK, NAK를 기다리는 상으로 다시 돌아왔다.
④ 이벤트: IP로부터 손상되지 않은 ACK패킷이 전달되었다.
액션 : 별도의 액션은 없다.
1번 패킷을 전송하기 위해 APP가 data주기를 대기하는 상으로 변경되었다.
이후의 통신과정은 움직이는 패킷의 시퀀스 넘버만 1로 바뀌고 동일하게 진행된다.
시퀀스 넘버 0과 1이 번갈아가며 과정을 반복한다.

receiver tcp 통신과정
① 0번 data를 전송하기 위해 IP가 패킷을 주기를 대기한다.
IP가 0번 패킷을 주기를 대기한다.(시퀀스 넘버는 패킷에 기재된다.) (01.15 수정)
②이벤트: IP로부터 손상되지 않은 0번 패킷이 전달되었다.
액션 : 전달받은 패킷에서 data를 추출했다.
: data를 APP에 전달했다.
: ACK와 그 checksum을 포함해서 sndpkt을 만들었다.
: sndpkt을 IP에 전달했다.
1번 data를 전송하기 위해 IP가 패킷을 주기를 대기하는 상으로 변경되었다.
③ 이벤트: IP로부터 손상된 패킷이 전달되었다.
액션 : NAK와 그 checksum을 포함해서 sndpkt을 만들었다.
: sndpkt을 IP에 전달했다.
1번 data를 전송하기 위해 IP가 패킷을 주기를 대기하는 상으로 다시 돌아왔다.
④ 이벤트: IP로부터 손상되지 않은 0번 패킷이 전달되었다.
액션 : ACK와 그 checksum을 포함해서 sndpkt을 만들었다.
: sndpkt을 IP에 전달했다.
1번 data를 전송하기 위해 IP가 패킷을 주기를 대기하는 상으로 다시 돌아왔다.
이후의 통신과정은 움직이는 데이터의 시퀀스 넘버만 1로 바뀌고 동일하게 진행된다.
시퀀스 넘버 0과 1이 번갈아가며 과정을 반복한다.
리눅스 사용자 관리 관련 명령어
● /etc/default/useradd
GROUP : 기본 등록 그룹의 GID 값이다.
HOME : 생성될 홈 디렉토리의 위치이다.
INACTIVE : 패스워드 만료 이후의 유효(기간) 여부를 설정한 값이다.
EXPIRE : 계정 종료 일자를 지정한 값이다.
SHELL : 기본 사용 쉘을 지정한 값이다.
SKEL : 홈 디렉토리에 복사할 기본 환경 파일 위치를 나타낸다.
● useradd ‐D [옵션]
‐b : 홈 디렉토리를 수정한다.
‐g : 기본 그룹을 변경한다.
‐s : 기본 쉘을 변경한다.
‐m : skel 디렉토리를 변경한다.
‐e : 패스워드 만료일을 변경한다.
‐f : grace 기간을 변경한다.
grace 기간까지 패스워드 만료를 늦출 수 있다. 실질적인 패스워드 만료기간은 패스워드 만료일 + grace기간이다.
grace 기간까지 도달하면 알림이 나온다.
● /etc/login.defs
PASS_MAX_DAYS: 패스워드 유효 기간을 나타낸다.(99999 : 무한대)
PASS_MIN_DAYS : 지정된 기간 내에는 패스워드 변경을 불허한다.
PASS_MIN_LEN: 패스워드의 최소 길이를 나타낸다.
PASS_WARN_AGE : 패스워드 grace time을 나타낸다.
● usermod
# usermod [옵션] [사용자명]
-g : 그룹을 변경한다.
-G : 그룹을 추가한다.
-s : 셀을 변경한다.
-u : UID를 변경한다.
-l : 계정을 변경한다.(‐‐login)
‐d, ‐m 도 같이 사용된다.
-d : 홈 디렉토리를 변경한다.(‐‐home)
‐m :지정한 홈 디렉토리 생성 및 파일 이전을 한다.(‐‐move‐home)
‐d와 -m은 함께 쓰인다.
리눅스 파일 구조

# ls -l 을 입력 시 위와 같은 화면이 출력된다.
퍼미션 부분에서 첫 번째 자리는 파일의 종류를 나타낸다. 진짜 퍼미션은 첫 자리를 제외한 9자리가 나타낸다.
● 파일의 종류

파일의 종류는 위의 사진과 같이 나타낸다.
● 퍼미션
파일이나 디렉토리에 대한 사용자의 허가 정도를 나타낸다.
사용자는 소유자(user), 그룹 소유자(group), 이외 모든 사용자(other)로 구별한다.
접근 권한에는 r, w, x, s, t 등의 권한으로 구별한다.

권한 표시에 따른 파일과 디렉토리에 대한 권한은 위의 그림과 같다.
퍼미션이 rwx rwx rwx 일 때,
앞에서 세 자리씩 각각 소유자(u), 그룹(g), 이외의 사람들(o)의 권한을 나타낸다.
표기(8진수) : 퍼미션은 각 문자의 합으로 표현한다.
r : 4 : 100
w : 2 : 010
x : 1 : 001
rwxr‐xr‐x : 755
rwxr‐‐r‐‐ : 744
● chmod
퍼미션을 수정하는 명령이다.
# chmod [옵션] [퍼미션] [파일]
‐R : 디렉토리인 경우 하위 디렉토리와 파일까지 수정한다.
대상: u(user), g(group), o(other), a(all)
operator : +(추가), ‐(삭제), =(지정 항목만 설정한다. chattr과 동일하다.)
퍼미션: r, w, x, s, t
# chmodg+wx, o‐w, o+xa.txt
# chmod a+rwx,g=w a.txt
-모든 사용자에 rwx를 추가하지만 group은 w만 설정한다.
'일일 정리' 카테고리의 다른 글
Go-Back-N 프로토콜, 파일 시스템과 파티션 (0) | 2025.01.16 |
---|---|
rdt 2.2 (NAT가 없는 rdt), rdt 3.0 (패킷 소실), 파이프라인 프로토콜, 퍼미션, 파일의 속성 (0) | 2025.01.15 |
ICMP, ARP/RARP, 전송계층(Transport Layer) 서비스 개요, 다중화( Multiplexing )와 역다중화( demultiplexing ), UDP, 리눅스 사용자 관리 관련 명령어 (7) | 2025.01.13 |
VLSM, NAT, HTML (Hyper Text Markup Language) (4) | 2025.01.11 |
라우터, 네트워크 분할, 리눅스 명령어(tar, stat) + VI에디터 (3) | 2025.01.09 |